【发布时间】:2012-11-22 07:01:56
【问题描述】:
我有一个大型脚本,旨在一次运行一项任务。但是我有一个初始化脚本,它使用 start-stop-daemon 在我们想要的任何时候终止脚本。脚本结束得很好,但是 subprocess 命令运行直到它完成。我怀疑这可能只是我如何尝试执行全局变量的问题。或者我使用 .communicate 与子进程。无论如何,这是代码中的相关内容:
import subprocess
import os
import signal
pro = ''
def sigHandler( signum, frame ):
global pro
os.killpg( pro.pid, signal.SIGTERM )
sys.exit()
def run(data):
#I found an example using preexec_fn somewhere on stackoverflow. Cant
#remember if they were using .communicate() or not
global pro
pro = subprocess.Popen( command, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = False, preexec_fn = os.setsid ).communicate()
return( 1 )
if __name__ == '__main__':
signal.signal( signal.SIGTERM, sigHandler )
while True:
run( relevantData )
【问题讨论】:
-
似乎变量 pro 直到子进程完成才获取数据。因此,当 sigterm 在子进程运行时运行时,没有要杀死的 pid 数据。这可能是communicate() 的一个特性。我想改用 wait() 但我遇到了命令输出的缓冲区问题。
标签: python subprocess global kill