1

如果输出中有字符串,我正在尝试终止子进程 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()
4

2 回答 2

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
于 2018-10-12T00:29:22.837 回答
0

有关您调用的方法,请参阅文档。首先,check_call一直执行到进程结束,然后从进程返回返回码。我不确定您打算如何从通常是整数的返回码中找到“PING”。

如果它那里,请查看if语句的主体:您创建一个全新的 实例ping,等待它完成,然后尝试终止返回代码。

我建议您阅读有关子流程的教程。了解如何获取进程句柄并在其上调用操作。您需要获取输出流的句柄,在其中查找“PING” 然后调用terminate您在调用时获得的进程句柄。

于 2018-10-09T20:25:52.103 回答