我在OSX上使用Xamarin 6.0.1,mono 4.4.1和NUnit 3.4.1来运行运行命令行参数的类库类
" ios-deploy"。直接在终端上返回:" / usr / local / bin / ios-deploy"
然而,在我的应用程序中,命令返回" / usr / bin /其中"
关于如何让应用程序返回终端返回的内容的任何想法?
请参阅下面的代码,感谢您的想法。
public class ProcesRunner
{
public string getProcess()
{
ProcessStartInfo p = new ProcessStartInfo("/usr/bin/which", "which ios-deploy");
p.CreateNoWindow = true;
p.RedirectStandardOutput = true;
p.RedirectStandardError = true;
p.UseShellExecute = false;
Process pg = new Process();
pg.StartInfo = p;
pg.Start();
string strOutput = pg.StandardOutput.ReadToEnd();
string strError = pg.StandardError.ReadToEnd();
Console.WriteLine(strError);
pg.WaitForExit();
return strOutput;
}
}
单元测试
[TestFixture()]
public class Test
{
[Test()]
public void TestCase()
{
ProcesRunner pr = new ProcesRunner();
string outvar = pr.getProcess();
Console.WriteLine(outvar);
}
}
答案 0 :(得分:2)
更新:刚刚从您的评论中意识到这是由于您在Xamarin Studio / MonoDevelop中运行测试。
在应用程序中启动Process
时,如果本身尚未获得shell环境,即您单击了图标以启动它,则从cli启动它,您需要告诉您的进程以登录shell(man bash
以获取详细信息)以运行您的bash配置文件并获取路径设置等...
-l Make bash act as if it had been invoked as a login shell
替换:
ProcessStartInfo p = new ProcessStartInfo("/usr/bin/which", "which ios-deploy");
使用:
ProcessStartInfo p = new ProcessStartInfo("/bin/bash", "-l -c 'which ios-deploy'");
输出:
nunit-console -nologo bin/Debug/WhichTest.dll
.
/usr/local/bin/ios-deploy
Tests run: 1, Failures: 0, Not run: 0, Time: 0.049 seconds
答案 1 :(得分:0)
替换
ProcessStartInfo p = new ProcessStartInfo("/usr/bin/which", "which ios-deploy");
与
ProcessStartInfo p = new ProcessStartInfo("/usr/bin/which", "ios-deploy");
您正在将which
传递给which
,这就是您看到which
路径的原因:)
修改强>
如果从参数中删除which
会导致空字符串,那么可能是因为ios-deploy
位于您的用户路径上。您可能需要设置p.LoadUserProfile = true
,您可能需要升级到NUnit 3.4.1并使用命令行选项--loaduserprofile
。与查理的建议一起,它应该有效。
答案 2 :(得分:0)
您在流程完成之前捕获输出。您需要在WaitForExit之后移动这些行。