我想使用此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。
答案 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)