2014-12-17 2 views
1

Запуск C# консольное приложение компилируется в визуально студии 2013 на Raspberry Pi (Linux) с установленным Mono, следующий код ...C# Mono Linux Вывод процесса

System.Diagnostics.Process syncProc = new System.Diagnostics.Process(); 
syncProc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
syncProc.StartInfo.UseShellExecute = false; 
syncProc.StartInfo.FileName = "bash"; 
syncProc.StartInfo.Arguments = "-c sync --help"; 
syncProc.StartInfo.RedirectStandardError = true; 
syncProc.StartInfo.RedirectStandardOutput = true; 
syncProc.Start(); 
String stdOutput = syncProc.StandardOutput.ReadToEnd(); 
String errorOutput = syncProc.StandardError.ReadToEnd(); 
syncProc.WaitForExit(); 

if (syncProc.ExitCode == 0) 
{ 
    Console.WriteLine("SOUTPUT: " + stdOutput); 
} 
else 
{ 
    Console.WriteLine("EOUTPUT: " + errorOutput); 

    throw new Exception("Failed to sync with exit code: " + syncProc.ExitCode); 
} 

... выходы "SOUTPUT:"

Почему stdOutput всегда пуст?

+0

Что выход, если вы запустите 'Баш -c синхронизации --help' из консоли самостоятельно? –

+0

Нет выхода. Однако «sync -help» показывает: Использование: синхронизация [OPTION] Принудительное изменение блоков на диск, обновление суперблока. --Показать эту помощь и выйти - информация о версии выходных данных и выход –

+0

Ну, есть ваш ответ: stdOutput пуст, потому что команда, которую вы выполняете, ничего не выводит. –

ответ

0

Вы можете попробовать перенаправлять весь вывод асинхронно так:

syncProc.ErrorDataReceived += (s, e) => Console.WriteLine("EOUTPUT:{0}", e.Data); 
syncProc.OutputDataReceived += (s, e) => Console.WriteLine("SOUTPUT:{0}", e.Data); 
syncProc.Start(); 
syncProc.BeginErrorReadLine(); 
syncProc.BeginOutputReadLine(); 
+1

Он работает в Windows, но не на Rasp Pi ... –

0

Почему stdOutput всегда пусто?

Аргументы передаются неправильно. командует -c опциона должна содержаться в одном аргументе command_string:

syncProc.StartInfo.Arguments = "-c 'sync --help'"; 
Смежные вопросы