(我正在使用Python 3.4.2)
我有一个名为test.py的脚本,处理SIGTERM等信号。然而,当它被其他脚本调用时,信号处理并不正确。
这是test.py:
这是test.py:
#! /path/to/python3
import time
import signal
import sys
def handleSIG(signal, frame):
for i in range(10):
print(i)
sys.exit()
for sig in [signal.SIGTERM, signal.SIGINT, signal.SIGQUIT, signal.SIGHUP]:
signal.signal(sig, handleSIG)
time.sleep(30)
如果我只是调用“test.py”并按“Ctrl + C”,那么它会将0,1,...,9打印到控制台。然而,如果我在另一个脚本中使用subprocess.call调用test.py,那么只有0会被打印。例如,这里是另一个调用test.py的脚本:
import subprocess
cmd = '/path/to/test.py'
subprocess.call(cmd)
奇怪的是,使用subprocess.Popen()可以消除此错误。
subprocess.call()
)的情况下,当父进程关闭时,它会发送SIGKILL
信号给子进程。它打印0的原因可能是在发送SIGKILL
之前发送了一些东西(你可以打印出来看看),这给了子进程一个非常短的清理机会... - zvone