gpt4 book ai didi

python - 程序重新启动时,python 子进程管道可以重新连接到原始子进程吗?

转载 作者:太空宇宙 更新时间:2023-11-04 06:00:30 25 4
gpt4 key购买 nike

我正在寻找一种安全的方式来重启我的 python 程序,它能够重新控制重启前启动的子进程。

我使用带线程的子进程来监控长时间运行的命令stdout/stderr,它将持续生成一些输出消息。

示例代码片段如下:

class PS(threading.Thread):
def __init__(self, command):
threading.Thread.__init__(self)
self.command = command

def run(self):
try:
process = subprocess.Popen(self.command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(process.stdout.readline, ''):
''' do something to line'''

当我的 python 主程序终止时(例如杀死它的 pid),它的子进程(由 PS 类执行的 command)仍然作为后台运行过程。

我的问题是,在 python 中是否有任何方法可以“重新附加”子进程,以便我可以继续监视它的 stdout/stderr

附言我只在 linux 环境中需要它,更具体地说是在 ubuntu 14.04 中。

最佳答案

当子级的标准输出绑定(bind)到管道时,如果它在父级死亡后尝试写入该管道,则子级将收到 SIGPIPE 信号,因为管道的远端不再存在。

为确保子进程在父进程中存活下来,并允许父进程恢复,您应该简单地写入文件并让父进程从该文件中读取。

关于python - 程序重新启动时,python 子进程管道可以重新连接到原始子进程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25363940/

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