从python程序执行带有&符号的shell脚本

时间:2015-05-19 03:45:40

标签: python bash

我想使用&符号提交我长期运行的Python作业。我将通过使用子进程调用它从交互式Python程序中取消此过程。

如果我想从菜单选项中结束作业,我将如何以编程方式跟踪提交的作业?

Example of interactive program:
Main Menu
1. Submit long running job &
2. End long running job

2 个答案:

答案 0 :(得分:4)

如果你正在使用python的subprocess模块,那么你真的不需要再次使用&进行背景了吗?您可以保留Popen对象来跟踪作业,它将在另一个python进程继续时运行。

如果您的"外部" python进程将终止你需要保留什么样的轨道? pgrep / pkill会合适吗?或者,您可以让长时间运行的作业记录其PID,通常在/ var / run某处,并使用它来跟踪进程是否仍处于活动状态和/或发出信号。

答案 1 :(得分:0)

你可以使用Unix信号。在这里,我们捕获SIGUSR1以告知流程将一些信息传达给STDOUT

#!/usr/bin/env python
import signal
import sys
def signal_handler(signal, frame):
    print('Caught SIGUSR1!')
    print("Current job status is " + get_job_status())

signal.signal(signal.SIGUSR1, signal_handler)

然后从shell

kill <pid> --signal SIGUSR1