注意:此答案的最新版本比2009年发布时要少。subprocess
现在建议在文档中使用其他答案中显示的模块
(请注意,子流程模块提供了更强大的工具来生成新流程并检索其结果;使用该模块比使用这些功能更可取。)
如果你希望你的进程在后台启动,则可以使用system()与你的Shell脚本相同的方式来使用和调用它,也可以spawn
:
import os
os.spawnl(os.P_DETACH, 'some_long_running_command')
(或者,你也可以尝试使用便携性较差的os.P_NowAIT
标志)。
尽管jkp
的解决方案有效,但是更新的方法(以及文档建议的方法)是使用subprocess
模块。对于简单的命令,它等效,但是如果你要执行复杂的操作,它提供了更多选项。
你的案例示例:
import subprocess
subprocess.Popen(["rm","-r","some.file"])
这将rm -r somefile
在后台运行。请注意,调用.communicate()
从返回的对象Popen将一直阻塞,直到完成为止,因此,如果要使其在后台运行,请不要这样做:
import subprocess
ls_output=subprocess.Popen(["sleep", "30"])
ls_output.communicate() # Will block for 30 seconds
另外,有一点需要澄清:这里使用的“背景”纯粹是一个壳概念;从技术上讲,你的意思是你希望在等待进程完成时生成一个没有阻塞的进程。但是,我在这里使用“背景”来指代类似外壳背景的行为。