【问题标题】:C# Mono Linux Process OutputC# Mono Linux 进程输出
【发布时间】:2014-12-17 05:37:09
【问题描述】:

在安装了 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);
}

...输出“输出:”

为什么stdOutput总是空的?

【问题讨论】:

  • 如果你自己从控制台运行bash -c sync --help,输出是什么?
  • 没有输出。但是“sync --help”显示: 用法:sync [OPTION] 强制更改块到磁盘,更新超级块。 --help 显示此帮助并退出 --version 输出版本信息并退出
  • 嗯,这就是你的答案:stdOutput 是空的,因为你正在执行的命令没有输出任何东西。
  • 如果我想通过比较 windows 来理解命令。使用命令提示符 A 的参数打开命令提示符 B 将在 B 中显示 B 的输出,而不是 A。在这种情况下不一样吗?通过打开带有参数的单独终端,默认情况下不会显示输出,因为单独的终端是接收输出的终端?不需要重定向吗?到产生单独终端的终端?

标签: c# linux process mono raspberry-pi


【解决方案1】:

您可以尝试像这样异步重定向整个输出:

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();

【讨论】:

    【解决方案2】:

    为什么stdOutput总是空的?

    参数传递错误。 -c 选项的命令必须包含在单个参数中command_string

    syncProc.StartInfo.Arguments = "-c 'sync --help'";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      相关资源
      最近更新 更多