C# Process.StandardOutput.ReadToEnd()-输出为空。从cmd运行相同的应用程序-输出正常
我试图在使用C# Process.StandardOutput.ReadToEnd()-输出为空。从cmd运行相同的应用程序-输出正常,c#,ironpython,iar,C#,Ironpython,Iar,我试图在使用IarBuild.exe实用程序(IARcmd实用程序来构建项目)构建项目时获取输出 我正在使用一个简单的IronPython脚本: process = System.Diagnostics.Process() process.StartInfo.FileName = path_process process.StartInfo.Arguments = command_line_arguments process.StartInfo.RedirectS
IarBuild.exe
实用程序(IAR
cmd实用程序来构建项目)构建项目时获取输出
我正在使用一个简单的IronPython
脚本:
process = System.Diagnostics.Process()
process.StartInfo.FileName = path_process
process.StartInfo.Arguments = command_line_arguments
process.StartInfo.RedirectStandardError = True
process.StartInfo.RedirectStandardOutput = True
process.StartInfo.RedirectStandardInput = True
process.StartInfo.UseShellExecute = False
process.StartInfo.CreateNoWindow = True
process.Start()
output = process.StandardOutput.ReadToEnd()
process.WaitForExit()
return {"Exit code": process.ExitCode, "Output": output}
在我的例子中,“输出”总是空的(“StandardError”也是空的)。
如果我尝试在命令行(“cmd.exe”)中执行相同的应用程序,则会成功显示输出
问题可能与某些操作系统设置(或其他安装的应用程序所做的更改)有关,因为当我尝试在其他虚拟机(相同的操作系统)上执行相同的脚本时,进程.StandardOutput.ReadToEnd()
正常
当您传递参数时,使用“subprocess.call()”方法而不是“System.Diagnostics.Process()”时,我得到了相同的结果。您似乎传递了三个参数: 1) C:\test\test.ewp 2) -生成调试 3) -日志信息 但它们被视为6个参数,因为它们包含空格 使用
我可能错了。为了进一步参考,请查看什么是命令行参数和路径进程。路径\u进程=r“C:\Program Files(x86)\IAR Systems\Embedded Workbench 7.2\common\bin\IarBuild.exe”;command\u line\u arguments=“C:\\test\\test.ewp-build Debug-log info”三个参数被IAR正确解析,只有输出未显示,因此我想您也需要指定工作目录。Process.startinfo.WorkingDirectory=@“。。根据您的要求。很可能它正在创建输出,但在其他位置。
command_line_arguments = "\"C:\\test\\test.ewp\" \"-build Debug\" \"-log info\""