如果字符串在输出中,则终止子流程

时间:2018-10-09 20:04:54

标签: python if-statement subprocess shlex

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

2 个答案:

答案 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