子进程管道中断程序

时间:2019-05-15 09:15:53

标签: python popen

我正在自动化同时具有CLI的GUI应用程序。我可以成功运行以下命令(theApplication是内部开发的应用程序):

import subprocess
process = subprocess.Popen(r'theApplication.exe -foo=7') 

然后打印我希望处理的输出,因此我使用subprocess.PIPE

import subprocess
process = subprocess.Popen(r'theApplication.exe -foo=7', stdout=subprocess.PIPE) 

现在程序无法启动,并且Windows报告该theApplication has stopped working。如果将stdout重定向到DEVNULL或文件,也会发生同样的情况。我尝试将bufsize设置为0和1,并且发生相同的情况。

尝试对所有排列进行了重定向,其中stdoutstderr均未重定向。仅当两个都不重定向时,它才起作用。如果重定向,它将立即中断程序。 process.returncode的值为None

如何通过管道传输输出会破坏程序?

2 个答案:

答案 0 :(得分:0)

您是否已经使用list参数尝试过?喜欢:

import subprocess
process = subprocess.Popen(["theApplication.exe", "-foo=7"], stdout=subprocess.PIPE) 

答案 1 :(得分:0)

因此答案是也重定向stdin=subprocess.PIPE,尽管theApplication不会从中读取。