确定进程是否已成功终止

时间:2010-06-21 11:28:03

标签: python bash unix

我有一些代码在python

的后台执行unix shell命令
 import subprocess
 process = subprocess.Popen('find / > tmp.txt &',shell=True)

我需要捕捉我知道该过程已成功完成的场景  完成。

请说明示例代码

Tazim

2 个答案:

答案 0 :(得分:3)

不需要&:命令在单独的进程中启动,并独立运行。

如果您想等到该过程终止,请使用wait()

process = subprocess.Popen('find / > tmp.txt', shell = True)
exitcode = process.wait()
if exitcode == 0:
    # successful completion
else:
    # error happened

如果您的程序在此期间可以执行某些有意义的操作,则可以使用poll()来确定该过程是否已完成。

此外,您可以直接从管道读取,而不是将输出写入临时文件然后从Python程序中读取它。有关详细信息,请参阅subprocess documentation

答案 1 :(得分:2)

不要使用shell = True。这对你的健康有害。

proc = subprocess.Popen(['find', '/'], stdout=open('tmp.txt', 'w'))
if proc.wait() == 0:
  pass

如果您确实需要文件,请使用import tempfile而不是硬编码的临时文件名。如果您不需要该文件,请使用管道(请参阅Thomas建议的子流程文档)。

另外,不要在Python中编写shell脚本。请改用os.walk功能。