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