Я хочу назвать исполняемый файл (в моем случае это PNGOUT.exe) и захватить его вывод из stdout. Но оказалось, что это сложно: приложение использует какие-то управляющие символы для замены ранее напечатанного вывода (отображение прогресса), а классы C# счастливо записывают их, и когда я хочу анализировать выходную строку, у меня появляется серьезная головная боль. (Это даже потребовалось некоторое время для меня, чтобы выяснить, что происходит с моей строкой)Как работать с выводами из консольных приложений, использующих контрольные символы?
Я звоню исполняемый следующим способом:
public static string RunPNGOut(string pngOutPath, string target) {
var process = new Process {
StartInfo = {
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true,
FileName = pngOutPath,
Arguments = '"' + target + '"'
}
};
process.Start();
var result = process.StandardOutput.ReadToEnd();
process.WaitForExit();
return result;
}
мне нужно либо использовать другой метод, который фиксирует только конечное состояние текста в консоли или каким-то образом избавиться от управляющих символов в result
(не просто удалить их, а «применить» их к строке, чтобы получить окончательный вид). Как это можно сделать?
Являются ли управляющие символы экранированными? (например, '\\ t' вместо' \ t')? – keyboardP
Если я просто печатаю строку, она выглядит как окончательный текст, поэтому я думаю, что нет, они не сбегают. –
Если не сбежать, то Base64 может быть закодирован? В основном вам необходимо определить характер вашего ввода. –