如果输出中有字符串,我正在尝试终止子进程 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()
请参考您调用的方法的文档。 首先,check_call执行直到进程完成,然后返回进程的返回代码。 我不确定您打算如何从返回代码中找到"PING",返回代码通常是整数。
如果它在那里,请查看您的if
语句的正文:您分叉一个全新的ping
实例,等待它完成,然后尝试终止返回代码。
我建议您完成有关子流程的教程。 了解如何获取进程句柄并对其调用操作。 您需要获取输出流的句柄,在其中查找"PING",然后在调用时获得的进程句柄上调用terminate
。
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