我正在尝试将 shell 脚本移植到更具可读性的 python 版本。原始 shell 脚本在后台使用“&”启动多个进程(实用程序、监视器等)。如何在 python 中实现相同的效果?我希望这些进程不会在 python 脚本完成时死掉。我确信它与守护进程的概念有某种关系,但我找不到如何轻松做到这一点。
原文由 Artem 发布,翻译遵循 CC BY-SA 4.0 许可协议
虽然 jkp 的解决方案有效,但更新的做事方式(以及文档推荐的方式)是使用 subprocess
模块。对于简单的命令,它是等效的,但如果您想做一些复杂的事情,它会提供更多选项。
您的案例示例:
import subprocess
subprocess.Popen(["rm","-r","some.file"])
这将在后台运行 rm -r some.file
。请注意,在从 Popen
返回的对象上调用 .communicate()
--- 将阻塞直到它完成,所以如果你想让它在后台运行,请不要这样做:
import subprocess
ls_output=subprocess.Popen(["sleep", "30"])
ls_output.communicate() # Will block for 30 seconds
请参阅 此处 的文档。
另外,澄清一点:您在这里使用的“背景”纯粹是一个外壳概念;从技术上讲,您的意思是您希望在等待进程完成时不阻塞地生成一个进程。但是,我在这里使用“背景”来指代类似 shell 背景的行为。
原文由 Dan 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
注意:这个答案比 2009 年发布时更新的少。现在 在文档中 推荐使用其他答案中显示的
subprocess
模块如果您希望您的进程在后台启动,您可以使用
system()
并以与您的 shell 脚本相同的方式调用它,或者您可以spawn
它:(或者,您可以尝试不太便携的
os.P_NOWAIT
标志)。请参阅 此处的文档。