gpt4 book ai didi

python - 使用子进程时如何在异常时向子进程发送终止信号

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:43 28 4
gpt4 key购买 nike

我正在通过子进程从另一个 python 程序运行一个 python 程序,我这样调用它。

try:
subproc = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE,
shell=True)
o, e = subproc.communicate()
sys.stdout.write(o)
sys.stderr.write(e)
except:
subproc.terminate()

在被调用的程序中,我注册了如下所示的信号处理程序。然而,尽管调用了 terminate 函数,但在上面的程序中,它永远不会在异常时被调用。但是如果我单独运行子程序,handle_exit 函数会被调用。我在这里犯了什么错误?

def handle_exit(sig, frame):
print('\nClean up code here)
....

signal.signal(signal.SIGTERM, handle_exit)
signal.signal(signal.SIGINT, handle_exit)

更新:好的,我通过将 subproc.terminate 替换为以下内容来让它工作。

subproc.send_signal(signal.SIGINT)
subproc.wait()

这很好,但我还想获得异常时子进程的输出。我怎样才能得到它?

最佳答案

我找到了解决方案,就在这里。

try:
subproc = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE,
shell=True)
o, e = subproc.communicate()
except:
subproc.send_signal(signal.SIGINT)
o, e = subproc.communicate()
sys.stdout.write(o)
sys.stderr.write(e)

关于python - 使用子进程时如何在异常时向子进程发送终止信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56923820/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com