Я пытаюсь обернуть ping с помощью Python (3.7.4), используя subprocess
и re
.
. stdout
из функции subprocess
является байтовым массивом, поэтому мне пришлось изменитьтип регулярного выражения в соответствии с регистром.
import subprocess,re
out = subprocess.run(['ping', '-c', '1', '8.8.8.8'], capture_output=True)
print(out.stdout)
match = re.match(br'P(..)G', out.stdout, re.DOTALL | re.MULTILINE)
if match:
print(match.groups())
match = re.match(br'trans(.)', out.stdout, re.DOTALL | re.MULTILINE)
if match:
print(match.groups())
Фактический результат команды ping
:
b'PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.\n64 bytes from 8.8.8.8: icmp_seq=1 ttl=53 time=60.7 ms\n\n--- 8.8.8.8 ping statistics ---\n1 packets transmitted, 1 received, 0% packet loss, time 0ms\nrtt min/avg/max/mdev = 60.665/60.665/60.665/0.000 ms\n'
Первый вывод match.groups
:
(b'IN',)
Второй пустой (должен быть (b'm',)
), фактически все после первого \n
не может быть сопоставлено.
Обратите внимание, у меня есть re.MULTILINE
, преобразованиечтобы str
с использованием str()
или .decode()
не оказали никакого влияния на вывод.
Проверено несколькими различными онлайн-инструментами, все они работали, есть идеи?