我一直试图解决这个问题几个小时,搜索并尝试了很多东西,但我仍然无法理解需要完成的工作。
我必须自动执行这个名为" GetData.exe"的.NET控制台应用程序。 我正在使用Python 3.5.2,使用子进程模块和Windows 10。
由于控制台应用程序没有接收参数,我必须通过stdin发送预期的输入。我现在完全理解我应该如何处理stdin,stdout或stderr。
但是,如果以这种方式执行应用程序,那么他们只是在执行应用程序时失败了:
exe = 'C:\........\GetData.exe' # pseudo path
p = subprocess.run([exe], input=input_string,
universal_newlines=True, check=True)
print(p)
输出以下错误:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.Console.GetBufferInfo(Boolean throwOnNoConsole, Boolean& succeeded)
at System.Console.get_WindowWidth()
at GetData.Program.Main(String[] args)
通过Google搜索此错误,我几乎找不到有关Python子进程模块的相关信息。
subprocess.run返回此(在打印上):
CompletedProcess(args='C:\\Users\\......\\GetData.exe', returncode=3762504530)
但是,经过一些谷歌搜索,我发现打字"开始cmd"作为cmd,我想调用的命令加上参数shell=True
,使控制台应用程序窗口打开,就像我双击.exe时一样,或者当我从命令行调用它时: / p>
p = subprocess.run("start "+exe, input=input_string, universal_newlines=True, check=True)
它保持打开等待我的输入,而我的python代码执行的其余部分完成,而不是至少在打开窗口时,从stdin读取我的输入...
我认为控制台应用程序可能会出现一些错误,迫使它在打开的窗口中执行...我已经看到有关creationflags
和startupinfo,
以及我&#的一些问题39;我试过那些使用底层构造函数Popen(更新的subprocess.run方法),但没有成功。