Python как сделать скрипт ping -t бесконечным циклом - PullRequest
1 голос
/ 22 апреля 2019

Я хочу запустить файл скрипта python с помощью этой команды ping -t www.google.com.

До сих пор я делал один с командой ping www.google.com, которая работает, но я не смог выполнить цикл 10000 * бесконечно.

Вы можете найти ниже моего ping.py script:

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 Ответ

1 голос
/ 22 апреля 2019

Если вы хотите сохранить процесс открытым и постоянно общаться с ним, вы можете использовать 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() )

EDIT

В этой версии мы используем 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)
...