从Python程序中使用“&”运行一个shell脚本

4

我希望使用 & 符号提交我的长时间运行的 Python 作业。我将通过使用子进程调用它从交互式 Python 程序启动此过程。

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

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

4
如果你正在使用Python的subprocess模块,那么你不需要再使用&将其后台化,对吧?你只需要保留Popen对象以跟踪作业,它会在其他Python进程继续运行时运行。
如果你的“外部”Python进程将要终止,你需要保持什么样的跟踪?pgrep/pkill是否适用?或者,你可以让长时间运行的作业记录其PID,通常在/var/run下,然后使用该PID来跟踪进程是否仍然存活和/或发送信号。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接