Итак, я пытаюсь получить аналогичные результаты с помощью python, как и с скриптом bash.Быстрый ping sweep в python
Код для сценария Баш:
#!/bin/bash
for ip in $(seq 1 254); do
ping -c 1 10.10.10.$ip | grep "bytes from" | cut -d " " -f 4 | cut -d ":" -f 1 &
done
Дело в том, что я хотел бы сделать, это получить те же результаты, с той же скоростью. Проблема, которая у меня была с каждой версией скрипта python, заключается в том, что для завершения требуется очень много времени, по сравнению с несколькими секундами, которые выполняет пакетный скрипт.
Пакетный файл занимает около 2 секунд, чтобы прокрутить сеть/24, в то время как лучшее, что я могу получить с помощью скрипта python, составляет около 5-8 минут.
Последняя версия питона сценария:
import subprocess
cmdping = "ping -c1 10.10.10."
for x in range (2,255):
p = subprocess.Popen(cmdping+str(x), shell=True, stderr=subprocess.PIPE)
while True:
out = p.stderr.read(1)
if out == '' and p.poll() != None:
break
if out != '':
sys.stdout.write(out)
sys.stdout.flush()
Я пробовал несколько различных способов в питона, но не может получить какой-либо скорости сценария Баш.
Любые предложения?
Можете ли вы быть более точным - как долго это «очень долго» по сравнению с «несколько секунд»? –
Этот амперсанд в конце сценария bash заставляет процессы работать в фоновом режиме. Ваш скрипт Python запускает их все по одному. – Blender
Пакетный файл занимает около 2 секунд, чтобы прокрутить сеть/24, в то время как лучшее, что я могу получить с помощью скрипта python, составляет около 5-8 минут. –