执行将脚本作为守护程序运行的shell脚本时,Python会挂起

时间:2015-07-29 19:05:33

标签: python python-2.7 daemon

我正在尝试使用os.system(很快将替换为subprocess)来调用shell脚本(将进程作为守护进程运行)

os.system('/path/to/shell_script.sh')

shell脚本如下所示:

nohup /path/to/program &

如果我在本地环境中执行此shell脚本,则必须在返回到控制台之前按Enter键,因为shell脚本正在将进程作为守护程序运行。如果我在python中执行上面的命令,我还必须在返回控制台之前按Enter键。

但是,如果我在python程序中执行此操作,它将永远挂起。

如何在调用运行进程作为守护进程的shell脚本后让python程序恢复执行?

2 个答案:

答案 0 :(得分:2)

来自here -

  

在脚本中,在后台运行带有&符号的命令(&)   可能导致脚本挂起,直到ENTER被命中。这似乎与   写入stdout的命令。

你应该尝试将输出重定向到某个文件(如果你不需要,可以将其重定向),如果你真的不需要输出,可以name

/dev/null

答案 1 :(得分:0)

为什么不尝试使用单独的线程? 将您的流程整理成类似

的内容
def run(my_arg):
    my_process(my_arg)

thread = Thread(target = run, args = (my_arg, ))
thread.start()

签出加入和锁定以更好地控制线程执行。 https://docs.python.org/2/library/threading.html