如何在Python中启动后台进程?我正在尝试将shell脚本移植到更具可读性的python版本。原始shell脚本启动几个进程(实用程序、监视器等)在“&”的背景中。如何在python中实现同样的效果?当python脚本完成时,我希望这些进程不要死。我确信这与守护进程的概念有某种关系,但我无法轻松找到如何做到这一点。
查看完整描述
TA贡献1719条经验 获得超10个赞
注
:这一答案不如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
在后台。
但要小心:
subprocess.Popen()
如果python脚本中的任何内容都不取决于正在运行的命令的输出,则仅在后台运行一个进程:
例如,以下命令将
不
在后台运行:
import subprocess
ls_output=subprocess.Popen(["ls", "-a"], stdout=subprocess.PIPE)
见文件
这里
.
另外,需要澄清的一点是:“背景”纯粹是一个shell概念:您可能想要的是产生一个新的过程。我在这里使用了“背景”来指类似shell背景的行为,但不要把它误认为是实际处于后台的过程。
查看完整回答
你可能想知道答案
“如何在Python中调用外部命令”
.
最简单的方法是使用
os.system
职能,例如:
import os
os.system("some_command &")
基本上,不管你把什么传递给
system
函数的执行方式将与您在脚本中将其传递给shell一样。
查看完整回答