Это версия обновления ответа Мартина выше для последней версии Swift.
let task = Process()
task.launchPath = "/bin/sh"
task.arguments = ["-c", "echo 1 ; sleep 1 ; echo 2 ; sleep 1 ; echo 3 ; sleep 1 ; echo 4"]
let pipe = Pipe()
task.standardOutput = pipe
let outHandle = pipe.fileHandleForReading
outHandle.waitForDataInBackgroundAndNotify()
var obs1 : NSObjectProtocol!
obs1 = NotificationCenter.default.addObserver(forName: NSNotification.Name.NSFileHandleDataAvailable,
object: outHandle, queue: nil) { notification -> Void in
let data = outHandle.availableData
if data.count > 0 {
if let str = NSString(data: data, encoding: String.Encoding.utf8.rawValue) {
print("got output: \(str)")
}
outHandle.waitForDataInBackgroundAndNotify()
} else {
print("EOF on stdout from process")
NotificationCenter.default.removeObserver(obs1)
}
}
var obs2 : NSObjectProtocol!
obs2 = NotificationCenter.default.addObserver(forName: Process.didTerminateNotification,
object: task, queue: nil) { notification -> Void in
print("terminated")
NotificationCenter.default.removeObserver(obs2)
}
task.launch()
Я думаю, они просто забыли о добавлении дополнительной категории: info. По крайней мере, он не указан в формате вывода для внешних инструментов.
Цитата: «Категория должна быть либо« error », либо« warning ». Регистр не имеет значения. , категория не должна быть локализована. "
Я не могу понимать Ваш вопрос правильно, но я дам ему выстрел так или иначе.
Вы посмотрели на TraceSwitch implentation? Можно реализовать различных слушателей и произвести информацию к различным источникам как текст, консоль, и т.д.
Это могло бы быть тем, в чем Вы нуждаетесь.
Удачи!
Не могли бы вы использовать команду «Трассировка» в своем коде? Это просто поместит любой текст, который вы ему сообщаете, в окно вывода. Поэтому для размещения сообщений об ошибках вам, вероятно, потребуется сначала их отформатировать.
Хорошо, я поискал, и похоже, что вы сможете это сделать, если у вас установлен Visual Studio SDK.
Я нашел эту ссылку здесь
Я считаю, что вам нужно будет использовать пространство имен Microsoft.VisualStudio.Shell.
Фрагменты кода из приведенной выше ссылки выглядят следующим образом:
//Get the "Error List Window"
ErrorListProvider errorProvider = new ErrorListProvider(this);
Task newError = new Task();
newError.ErrorCategory = TaskErrorCategory.Error; // or TaskErrorCategory.Warning for warnings
newError.Category = TaskCategory.BuildCompile;
newError.Text = "Some Error Text";
errorProvider.Tasks.Add(newError);
Я еще не пробовал это, поэтому, если вы добьетесь успеха, не могли бы вы отправьте сюда для справок в будущем.
Я попытался заставить это работать, и, насколько я могу судить, это невозможно если вы на самом деле не напишете свой собственный плагин для VS, который анализирует вывод и генерирует задачи. Это было бы действительно удобной функцией, и я просто надеюсь, что они добавят ее в какой-то момент в будущем (я не могу беспокоиться о написании плагина, слишком много других небольших проектов, чтобы сэкономить время: L)
В конце концов, я
Вы пробовали настраивать ключевые слова списка задач?
Эта страница предполагает, что это возможно. Я предлагаю вам прочитать оттуда, если вы еще не сделали этого.