我想创建一个子进程,它将在父进程完成后运行。
我试过了:
subprocess.Popen(['myscript'])
exit()
已创建子项,但父项将等待子项完成。 相反,我想快速完成并让孩子在后台做艰苦的工作。有什么建议吗?
一些澄清:
我需要主要流程快速完成,因为它将从网络访问。它旨在触发另一个脚本。结果将在稍后(通过子进程)发送到电子邮件。因此,用户无需等待答案。快速“确定”,然后孩子开始。
编辑: 好的。说实话,即使我在这篇文章中的例子也是最简单的例子(只有那两行+脚本,它睡了10秒+写一个文件=>主要完成,我在10秒内得到一个文件)。 实际情况有点复杂。
有一个脚本,它遍历所有必须执行的脚本列表。这个主脚本使用subprocess.Popen和communic()(等待输出)。这称为我的“主要”脚本,我在这里请求帮助。这个“主要”做了一些事情,然后想要在后台经营一个孩子。在这种情况下,“主要”等待孩子。
我将尝试制作一个简短的清理代码示例。
答案 0 :(得分:1)
我认为这会奏效:
import os
os.spawnl(os.P_NOWAIT, 'myscript')
如果你只想在Linux上运行子进程,这是另一种使用GNU程序nohup
的方式:
subprocess.Popen(['nohup '+'myscript'+' &'])
# or use os.system()
答案 1 :(得分:0)
如果您使用Linux,那么一种方法是使用nohup
。请注意,nohup
还会将标准输出重定向到nohup.out
,这可能是不合需要的
subprocess.Popen(['nohup', 'myscript'])
exit()
答案 2 :(得分:0)
答案 3 :(得分:0)
使用以下代码片段
import subprocess, os
subprocess.Popen(['myscript'])
os._exit(0)