首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中启动后台进程?

如何在Python中启动后台进程?
EN

Stack Overflow用户
提问于 2009-07-28 18:56:50
回答 9查看 583.6K关注 0票数 379

我正在尝试将shell脚本移植到更具可读性的python版本。原始shell脚本启动几个进程(实用程序、监视器等)在"&“的背景中。如何在python中实现同样的效果?当python脚本完成时,我希望这些进程不要死。我确信这与守护进程的概念有某种关系,但我无法轻松地找到如何做到这一点。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-07-28 19:05:23

Note:这个答案不像2009年发布时那么流行。现在推荐使用其他答案中显示的subprocess模块在医生里

(请注意,子流程模块为生成新进程和检索其结果提供了更强大的工具;使用该模块比使用这些功能更好。)

如果希望进程在后台启动,可以使用system()并以与shell脚本相同的方式调用它,也可以使用spawn

代码语言:javascript
运行
复制
import os
os.spawnl(os.P_DETACH, 'some_long_running_command')

(或者,您也可以尝试使用较少可移植的os.P_NOWAIT标志)。

这里的文件

票数 105
EN

Stack Overflow用户

发布于 2011-08-28 21:47:04

虽然jkp的解决方案起作用,但新的处理方法(以及文档推荐的方式)是使用subprocess模块。对于简单的命令,它的等效性,但如果您想做一些复杂的事情,它提供了更多的选项。

例如,您的案例:

代码语言:javascript
运行
复制
import subprocess
subprocess.Popen(["rm","-r","some.file"])

这将在后台运行rm -r some.file。请注意,对从.communicate()返回的对象调用Popen将被阻塞,直到它完成为止,所以如果您希望它在后台运行,就不要这样做:

代码语言:javascript
运行
复制
import subprocess
ls_output=subprocess.Popen(["sleep", "30"])
ls_output.communicate()  # Will block for 30 seconds

请参阅文档这里

另外,需要澄清的一点是:在这里使用“后台”纯粹是一个shell概念;从技术上讲,您的意思是在等待进程完成时,您希望在不阻塞的情况下生成一个进程。但是,我在这里使用了“背景”来指类似shell的行为。

票数 483
EN

Stack Overflow用户

发布于 2009-07-28 19:02:59

您可能想知道“如何在Python中调用外部命令”的答案。

最简单的方法是使用os.system函数,例如:

代码语言:javascript
运行
复制
import os
os.system("some_command &")

基本上,传递给system函数的任何内容都将被执行,就像在脚本中将它传递给shell一样。

票数 55
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1196074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档