该subprocess.Popen
对象具有returncode
您可以访问的属性:
http://docs.python.org/2/library/subprocess.html#subprocess.Popen.returncode
您还可以查看使用check_call
便利功能:
http://docs.python.org/2/library/subprocess.html#subprocess.check_call
只有返回码为零时才会返回;否则,它将引发一个CalledProcessError
(您可以从中读取returncode
属性)。
您的示例,stdout 和 stderr 指向调用 Python 脚本而不是日志文件:
>>> import subprocess
>>> argpass = ['echo']
>>> argpass.append('hello world')
>>> # I reroute to PIPE because I don't have a logfile
>>> log_output_err = subprocess.PIPE
>>> out = subprocess.Popen(argpass,
stdout = log_output_err,
stderr = log_output_err)
>>> output,error = out.communicate()
>>> print output
hello world
>>> # Check if child process has terminated.
>>> # If it has finished, will return returncode attribute.
>>> # Otherwise, it returns None
>>> out.poll()
0
>>> # Or we can read the returncode attribute directly:
>>> out.returncode # Direct
0
>>>
如果您的过程需要很长时间才能完成,那么returncode
您去检查它时可能没有设置该值。如果值returncode
是,则None
意味着您的子进程尚未终止。您可以停止执行脚本,直到子进程使用该.wait()
方法终止。