Я хотел бы получить тот же вывод, что и этот код оболочки:
$ ping -c 1 192.168.1.18 | egrep "bytes from" | cut -d " " -f4
192.168.1.18:
Этот шеллкод будет пинговать 1 раз 192.168.1.10.
Затем будет отображена строка, содержащая «байты из».
Наконец, он выберет 4-й столбец на основе разделителя "" (который является пробелом). 4-й столбец - это просто IP-адрес.
Я думаю, что я близок к решению, но у меня есть некоторые проблемы с обработкой функции подпроцесса.
Вот мой код Python:
#!/usr/bin/python
import subprocess
ps1 = subprocess.Popen(('ping','-c','1','10.11.1.220'), stdout=subprocess.PIPE)
ps2 = subprocess.Popen(('egrep', '-i', 'bytes from'), stdin=ps1.stdout, stdout=subprocess.PIPE)
subprocess.call(['cut', '-d', '" "','-f','4'], stdin=ps2.stdout)
Итак, вот результат, который я получаю с этим кодом:
$ py ping-sweep.py
cut: the delimiter must be a single character
Try 'cut --help' for more information.
$ grep: write error: Broken pipe
Я думаю, что я близок, потому что с одной трубкой результат хороший.
Доказательство:
ps1 = subprocess.Popen(('ping','-c','1','10.11.1.220'), stdout=subprocess.PIPE)
subprocess.call(['egrep', '-i', 'bytes from'], stdin=ps1.stdout)
Результат вывода:
$ py ping-sweep.py
64 bytes from 10.11.1.220: icmp_seq=1 ttl=128 time=114 ms
Может ли помочь мне уйти от этого кошмара?
Спасибо!
Steackfrite