gpt4 book ai didi

python Popen : How do I stop(kill) the subprocess that created using Popen?

转载 作者:行者123 更新时间:2023-11-30 23:44:26 30 4
gpt4 key购买 nike

得到结果后,我需要停止通过Python中的Popen发出的服务(在另一个线程的后台运行),但是以下方法失败了(只是使用ping)解释):

class sample(threading.Thread):
def __init__(self, command, queue):
threading.Thread.__init__(self)
self.command = command;
self.queue = queue

def run(self):
result = Popen(self.command, shell=True, stdout=PIPE, stderr=STDOUT)
while True:
output = result.stdout.readline()
if not self.queue.empty():
result.kill()
break
if output != "":
print output
else:
break

def main():
q = Queue()
command = sample("ping 127.0.0.1", q)
command.start()
time.sleep(10)
q.put("stop!")
command.join()

if __name__ == "__main__":
main()

运行上面的程序后,当我 pgrep 进行 ping 时,它仍然存在。如何杀死 Popen 打开的子进程?谢谢。

PS:我也尝试过 result.terminate(),但也没有真正解决问题。

最佳答案

您实际上并不需要从线程运行子进程。尝试在没有线程的情况下运行子进程。另外,您指定了 shell=True,因此它在 shell 中运行该命令。这样就有了两个新进程,shell 和命令。您还可以通过设置 shell=False 来删除 shell。

关于 python Popen : How do I stop(kill) the subprocess that created using Popen?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10079505/

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