判断进程是否成功终止
我有一些代码,可以在Python中后台执行Unix命令。
import subprocess
process = subprocess.Popen('find / > tmp.txt &',shell=True)
我需要捕捉到一个情况,就是我想知道这个进程是否已经成功完成。
请用示例代码来解释一下。
Tazim
2 个回答
4
其实不需要用到 &
这个符号,因为这个命令会在一个单独的进程中运行,互不影响。
如果你想等这个进程结束后再继续,可以使用 wait()
这个方法:
process = subprocess.Popen('find / > tmp.txt', shell = True)
exitcode = process.wait()
if exitcode == 0:
# successful completion
else:
# error happened
如果你的程序在这段时间内可以做一些其他有意义的事情,你可以用 poll()
来检查这个进程是否已经结束。
另外,与你把输出写到一个临时文件再从你的Python程序中读取相比,你可以直接从管道中读取输出。具体的细节可以查看 subprocess
的文档。
2
不要使用shell=True。这对你来说不好。
proc = subprocess.Popen(['find', '/'], stdout=open('tmp.txt', 'w'))
if proc.wait() == 0:
pass
如果你真的需要一个文件,建议使用import tempfile
,而不是写死一个临时文件名。如果你不需要文件,可以使用管道(可以参考一下subprocess的文档,正如Thomas所建议的那样)。
另外,不要在Python中写shell脚本。可以使用os.walk
这个函数来代替。