Python如何使ping -t脚本无限循环

时间:2019-04-22 15:28:28

标签: python python-3.x cmd windows-10 subprocess

我想使用此ping -t www.google.com命令运行python脚本文件。

到目前为止,我已经使用有效的ping www.google.com命令执行了一个操作,但是我没有打算无限期地使用ping -t循环。

您可以在我的ping.py脚本下面找到:

import subprocess

my_command="ping www.google.com"
my_process=subprocess.Popen(my_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

result, error = my_process.communicate()
result = result.strip()
error = error.strip()

print ("\nResult of ping command\n")
print("-" *22)
print(result.decode('utf-8'))
print(error.decode('utf-8'))
print("-" *22)
input("Press Enter to finish...")

我希望命令框在完成后保持打开状态。我正在使用Python 3.7。

1 个答案:

答案 0 :(得分:1)

如果您想一直保持进程打开并一直与之通信,则可以使用my_process.stdout作为输入,例如遍历行。使用“沟通”,您可以等到该过程完成,这对于无限期运行的过程是不利的:)

import subprocess

my_command=["ping", "www.google.com"]
my_process=subprocess.Popen(my_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

while True:
    print( my_process.stdout.readline() )

编辑

在此版本中,我们使用re仅从输出中获取“ time = xxms”部分:

import subprocess
import re

my_command=["ping", "-t", "www.google.com"]
my_process=subprocess.Popen(my_command, stdout=subprocess.PIPE, 
stderr=subprocess.PIPE)

while True:
    line = my_process.stdout.readline() #read a line - one ping in this case
    line = line.decode("utf-8") #decode the byte literal to string
    line = re.sub("(?s).*?(time=.*ms).*", "\\1", line) #find time=xxms in the string and use only that

    print(line)