我想使用C#和MonoDevelop运行以下bash命令并将输出存储到变量。
./ TestApp --H
我的MonoDevelop代码:
Process proc = new Process();
proc.StartInfo.FileName = "/bin/bash";
proc.StartInfo.Arguments = "/usr/mono/TestApp --H";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardErrort = true;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
var output = proc.RedirectStandardOutput.ReadToEnd()
以上代码无效。输出变量没有按预期获得值。
如果我使用shell脚本修改上面的代码,那么它的工作。
Test.sh
#!/bin/bash
/usr/mono/TestApp --H;
修改后的单声道代码:
proc.StartInfo.Arguments = "Test.sh";
谢谢
答案 0 :(得分:1)
如果/usr/mono/TestApp
不是shell脚本(对于你的问题,我猜它不是),这应该有效(你不需要bash来运行程序):
Process proc = new Process();
proc.StartInfo.FileName = "/usr/mono/TestApp";
proc.StartInfo.Arguments = "--H";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
var output = proc.StandardOutput.ReadToEnd ();
Console.WriteLine("stdout: {0}", output);
顺便说一下,使用重定向时要小心。如果TestApp进程和Mono进程之间的管道已满,您的应用程序将无法完成(存在死锁)阅读文档以获取更多信息:RedirectStandardOutput