在bash
中,我可以执行以下操作:
for f in subdir/*.sh; do
nohup "$f" "$@" &> /dev/null &
done
换句话说,它在后台运行*.sh
中的所有subdir
脚本,并分离,以便在主脚本结束时,后台脚本不会被终止。
现在,假设我有以下Python项目:
proj/
__init__.py
main.py
subdir/
__init__.py
mod_a.py
mod_b.py
mod_c.py
如何执行与bash脚本类似的操作?但是参数作为Python对象传递?
例如:我有两个字符串a
和b
,一个列表l
和一个字典d
mod_a.py
,调用mod_a.main(a, b, l, d)
,然后分离mod_b.py
,调用mod_b.main(a, b, l, d)
,然后分离mod_c.py
,调用mod_c.main(a, b, l, d)
,然后分离main.py
可以结束,让mod_a
,mod_b
和mod_c
在后台运行直至完成答案 0 :(得分:1)
要在Python中模拟nohup
,您可以让子进程忽略SIGHUP
信号:
import signal
def ignore_sighup():
signal.signal(signal.SIGHUP, signal.SIG_IGN)
即模仿bash脚本:
#!/bin/bash
for f in subdir/*.sh; do
nohup "$f" "$@" &> /dev/null &
done
在Python中使用subprocess
模块:
#!/usr/bin/env python3
import sys
from glob import glob
from subprocess import Popen, DEVNULL, STDOUT
for path in glob('subdir/*.sh'):
Popen([path] + sys.argv[1:],
stdout=DEVNULL, stderr=STDOUT, preexec_fn=ignore_sighup)
要创建正确的守护进程,可以使用python-daemon
package。
答案 1 :(得分:0)
我不知道python中的任何机制,但您可以尝试使用nohup
。您可以尝试运行
nohup python your_script.py arguments
使用os.system
或subprocess.call
。
答案 2 :(得分:0)
它可能是Run a program from python, and have it continue to run after the script is killed的副本而且没有,忽略SIGHUP没有帮助,但是preexec_fn = os.setpgrp可以。