#python #python-3.x
#python #python-3.x
Вопрос:
Я пытаюсь создать простую программу ping sweep с python 3.x, как показано ниже
import subprocess
subnet = "ping -c 1 10.1.1."
for i in range(250, 251):
subprocess.call(["ping -c1 10.1.1." str(i)], shell=True)
Она может выдавать правильные результаты; однако, также возвращаются некоторые ошибки. Могу ли я узнать, связано ли это как-то с моим кодом?
Результаты:
PING 10.1.1.250 (10.1.1.250) 56(84) bytes of data.
64 bytes from 10.1.1.250: icmp_seq=1 ttl=128 time=1.72 ms
--- 10.1.1.250 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.723/1.723/1.723/0.000 ms
PING 10.1.1.251 (10.1.1.251) 56(84) bytes of data.
64 bytes from 10.1.1.251: icmp_seq=1 ttl=128 time=1.88 ms
--- 10.1.1.251 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.884/1.884/1.884/0.000 ms
PING 10.1.1.252 (10.1.1.252) 56(84) bytes of data.
64 bytes from 10.1.1.252: icmp_seq=1 ttl=128 time=1.100 ms
Traceback (most recent call last):
File "test2.py", line 6, in <module>
subprocess.call(["ping -c1 10.1.1." str(i)], shell=True)
File "/usr/lib/python3.7/subprocess.py", line 325, in call
return p.wait(timeout=timeout)
File "/usr/lib/python3.7/subprocess.py", line 990, in wait
return self._wait(timeout=timeout)
File "/usr/lib/python3.7/subprocess.py", line 1624, in _wait
(pid, sts) = self._try_wait(0)
File "/usr/lib/python3.7/subprocess.py", line 1582, in _try_wait
(pid, sts) = os.waitpid(self.pid, wait_flags)
Спасибо.
Комментарии:
1. Да, вы должны обработать
KeyboardInterrupt
, если хотите, чтобы она завершилась, наctrl c
🙂
Ответ №1:
Вы должны обработать KeyboardInterrupt
,
import subprocess
netaddress = "10.1.1.{}"
limit = (10,255)
for i in range(*limit):
try:
subprocess.call(["ping", "-c1", netaddress.format(i)])
except KeyboardInterrupt as interrupt:
print("Skipping....")
# or `break` if you want to exit