我正在自动化同时具有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,并且发生相同的情况。
尝试对所有排列进行了重定向,其中stdout
和stderr
均未重定向。仅当两个都不重定向时,它才起作用。如果重定向,它将立即中断程序。 process.returncode
的值为None
。
如何通过管道传输输出会破坏程序?
答案 0 :(得分:0)
您是否已经使用list参数尝试过?喜欢:
import subprocess
process = subprocess.Popen(["theApplication.exe", "-foo=7"], stdout=subprocess.PIPE)
答案 1 :(得分:0)
因此答案是也重定向stdin=subprocess.PIPE
,尽管theApplication不会从中读取。