判断进程是否成功终止

2 投票
2 回答
2735 浏览
提问于 2025-04-16 00:14

我有一些代码,可以在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这个函数来代替。

撰写回答