我正在尝试将shell脚本移植到可读性更强的python版本。原来的shell脚本使用“&”在后台启动几个进程(实用程序、监视器等)。如何在python中实现相同的效果?我希望这些进程在python脚本完成时不死亡。我确信这与守护进程的概念有关,但我不知道如何轻松地做到这一点。
当前回答
你可以使用
import os
pid = os.fork()
if pid == 0:
Continue to other code ...
这将使python进程在后台运行。
其他回答
你可以使用
import os
pid = os.fork()
if pid == 0:
Continue to other code ...
这将使python进程在后台运行。
您可能想要开始研究os模块以派生不同的线程(通过打开交互式会话并发出帮助)。相关的函数是fork和任何一个exec函数。为了给你一个如何开始的想法,在一个执行fork的函数中放入这样的东西(函数需要接受一个列表或元组'args'作为参数,其中包含程序的名称和参数;你可能还想为新线程定义stdin, out和err):
try:
pid = os.fork()
except OSError, e:
## some debug output
sys.exit(1)
if pid == 0:
## eventually use os.putenv(..) to set environment variables
## os.execv strips of args[0] for the arguments
os.execv(args[0], args)
你可能想知道“如何在Python中调用外部命令”的答案。
最简单的方法是使用操作系统。系统功能,例如:
import os
os.system("some_command &")
基本上,无论您传递给系统函数的是什么,都将像在脚本中传递给shell一样执行。
我还没有尝试过这个,但使用.pyw文件而不是.py文件应该有帮助。Pyw文件没有控制台,所以理论上它不应该像后台进程一样出现和工作。
注:与2009年发布的答案相比,这个答案没有那么流行。现在建议在文档中使用其他答案中显示的subprocess模块
(注意,subprocess模块为生成新进程和检索其结果提供了更强大的功能;使用该模块比使用这些函数更可取。)
如果你想让你的进程在后台启动,你可以使用system()并像你的shell脚本一样调用它,或者你可以衍生它:
import os
os.spawnl(os.P_DETACH, 'some_long_running_command')
(或者,你也可以试试不那么便携的操作系统。P_NOWAIT国旗)。
请在这里查看文档。
推荐文章
- 如何在Python中进行热编码?
- 如何嵌入HTML到IPython输出?
- 在Python生成器上使用“send”函数的目的是什么?
- 是否可以将已编译的.pyc文件反编译为.py文件?
- Django模型表单对象的自动创建日期
- 在Python中包装长行
- 如何计算两个时间串之间的时间间隔
- 我如何才能找到一个Python函数的参数的数量?
- 您可以使用生成器函数来做什么?
- 将Python诗歌与Docker集成
- 提取和保存视频帧
- 使用请求包时出现SSL InsecurePlatform错误
- 如何检索Pandas数据帧中的列数?
- except:和except的区别:
- 错误:“字典更新序列元素#0的长度为1;2是必需的”