C#Mono Linux进程输出

C#Mono Linux进程输出,c#,linux,process,mono,raspberry-pi,C#,Linux,Process,Mono,Raspberry Pi,在安装了Mono的Raspberry Pi(Linux)上运行visual studio 2013中编译的c#控制台应用程序,下面的代码 System.Diagnostics.Process syncProc = new System.Diagnostics.Process(); syncProc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; syncProc.StartInfo.UseShellExe

在安装了Mono的Raspberry Pi(Linux)上运行visual studio 2013中编译的c#控制台应用程序,下面的代码

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总是空的?

您可以尝试异步重定向整个输出,如下所示:

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();
为什么stdOutput总是空的

这些论点被错误地传递了。
-c
选项的命令必须包含在单参数命令字符串中:


如果您自己从控制台运行
bash-csync--help
,输出是什么?没有输出。但是“sync--help”显示:用法:sync[OPTION]强制更改块到磁盘,更新超级块--帮助显示此帮助并退出--version输出版本信息并退出。下面是您的答案:stdOutput为空,因为您正在执行的命令没有输出任何内容。如果要通过与windows进行比较来理解该命令。使用命令提示符A中的参数打开命令提示符B,将在B中显示B的输出,而不是A。在这种情况下不是这样吗?通过使用参数打开单独的终端,默认情况下不会显示输出,因为单独的终端是接收输出的终端?它不需要重定向吗?到生成独立终端的终端?
syncProc.StartInfo.Arguments = "-c 'sync --help'";