如何判断subprocess.Popen()在shell=True时失败
Windows版本的Python 2.6.4:有没有办法判断在使用shell=True时,subprocess.Popen()是否失败?
当shell=False时,Popen()会成功地报告失败。
>>> import subprocess
>>> p = subprocess.Popen( 'Nonsense.application', shell=False )
Traceback (most recent call last):
File ">>> pyshell#258", line 1, in <module>
p = subprocess.Popen( 'Nonsense.application' )
File "C:\Python26\lib\subprocess.py", line 621, in __init__
errread, errwrite)
File "C:\Python26\lib\subprocess.py", line 830, in
_execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
但是当shell=True时,似乎没有办法判断Popen()调用是否成功。
>>> p = subprocess.Popen( 'Nonsense.application', shell=True )
>>> p
>>> subprocess.Popen object at 0x0275FF90>>>
>>> p.pid
6620
>>> p.returncode
>>>
欢迎提供想法。
祝好,
Malcolm
2 个回答
5
在第一种情况下,它无法启动;在第二种情况下,它成功启动了一个命令行界面,但这个命令行又无法执行应用程序。所以你的进程已经正确地启动了,然后退出了,现在在等你去查看它的退出代码。问题是,除非你的命令行或环境(比如没有内存)完全坏掉,否则Popen
本身是不会失败的。
所以,你可以放心地使用.poll()
和.wait()
来获取所有的坏消息。
16
returncode
这个东西是可以用的,不过在你调用 p.poll()
之前,它的值会是 None
。而 poll()
这个方法本身会返回错误代码,所以你可以直接这样做:
if a.poll() != 0:
print ":("