我有一些代码在python
的后台执行unix shell命令 import subprocess
process = subprocess.Popen('find / > tmp.txt &',shell=True)
我需要捕捉我知道该过程已成功完成的场景 完成。
请说明示例代码
Tazim
答案 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
功能。