如果输出中有字符串,我试图终止子进程pid,但是它不起作用。怎么了?
import subprocess
import shlex
if "PING" in subprocess.check_call(shlex.split("ping -c 10 gogole.com")):
subprocess.check_call(shlex.split("ping -c 10 gogole.com")).terminate()
答案 0 :(得分:0)
有关调用方法,请参阅文档。首先,check_call一直执行到该过程完成为止,然后从该过程返回返回代码。我不确定您打算如何从返回码(通常是整数)中找到“ PING”。
如果它是 ,请查看您的if
语句的主体:派生ping
的全新实例,等待其完成,然后尝试终止返回码。
我建议您通读有关子流程的教程。了解如何获取进程句柄并在 that 上调用操作。您需要获取输出流的句柄,在那个中查找“ PING”,然后在调用时获得的进程句柄上调用terminate
。
答案 1 :(得分:0)
import subprocess, os
run = "ping -c 10 google.com"
log = ""
process = subprocess.Popen(run, stdout=subprocess.PIPE, shell=True)
while True:
out = process.stdout.read(1)
log +=out
print log
if out == '' and process.poll() != None:
break
if "PING" in log:
print "terminated!"
process.kill()
process.terminate()
break