2014-12-05 2 views
2

Я пытаюсь выполнить ping ряд серверов, и я хочу сохранить вывод ping. Это все, что у меня есть.Реализация ping с использованием Python

import subprocess 

string_part = 'ping -W 2 -c 2 64.233.' 

for i in range(160,165):    
    for j in range(0,5): 
      prompt = string_part + str(i) + '.' + str(j) 
      result = subprocess.call(prompt, shell = True)  

Я думал, что если я дам «печать (результат)», после этого он напечатает результат. Однако он возвращает только 1. Я не хочу использовать потоки на данный момент. Кажется, я что-то упускаю! . :(

ответ

1

subprocess.call() возвращает код выхода процесса Чтобы получить на выходе стандартный вывод команды ping, используйте pipe и Popen.communicate() вместо:

string_part = 'ping -W 2 -c 2 64.233.{}.{}' 

for i in range(160, 165):    
    for j in range(5): 
      prompt = string_part.format(i, j) 
      proc = subprocess.Popen(prompt, shell=True, stdout=subprocess.PIPE) 
      result, _ = proc.communicate() 

Вы можете и должны избегать использования оболочку, просто передайте аргументы в списке:

command = ['ping', '-W', '2', '-c', '2'] 
ip_template = '64.233.{}.{}' 

for i in range(160, 165):    
    for j in range(5): 
      ip_address = ip_template.format(i, j) 
      proc = subprocess.Popen(command + [ip_address], stdout=subprocess.PIPE) 
      result, _ = proc.communicate() 
+0

Спасибо. Это работает! Я читал, что я не должен использовать shell = True, поэтому я решил не добавлять его, но не знал обходного пути для него. Я все еще не понимаю, как это работает, потому что вы передали его как список? – ashishv

+0

@ user165971: ​​оболочка будет делать то же самое; проанализируйте строку в отдельные аргументы, запустите команду и передайте остальные аргументы в виде списка. Без оболочки нам нужно сделать эту работу напрямую, но в Python, которая обычно просто упрощает. –

0
import subprocess 

string_part = 'ping -W 2 -c 2 64.233.' 
result=[] 
for i in range(160,165):    
    for j in range(0,5): 
      prompt = string_part + str(i) + '.' + str(j) 
      result.append(subprocess.call(prompt, shell = True)) 
print result 
0

Просто выходной магазин в Словаре с IP в качестве ключа и Popen.communicate[0] в качестве значения

string_part = 'ping -W 2 -c 2 64.233.{}.{}' 
d = {} 

for i in range(160, 165): 
    for j in range(0, 5): 
     prompt = string_part.format(i,j).split() 
     proc = subprocess.Popen(prompt, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
     d[prompt[-1]] = proc.communicate()[0] 
print d 

{'64.233.162.1': 'PING 64.233.162.1 (64.233.162.1) 56(84) bytes of data.\n\n--- 64.233.162.1 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1007ms\n\n', '64.233.163.0': 'PING 64.233.163.0 (64.233.163.0) 56(84) bytes of data.\n\n--- 64.233.163.0 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1006ms\n\n', '64.233.162.4': 'PING 64.233.162.4 (64.233.162.4) 56(84) bytes of data.\n\n--- 64.233.162.4 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1006ms\n\n', '64.233.163.2': 'PING 64.233.163.2 (64.233.163.2) 56(84) bytes of data.\n\n--- 64.233.163.2 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1006ms\n\n', '64.233.163.3': 'PING 64.233.163.3 (64.233.163.3) 56(84) bytes of data.\n\n--- 64.233.163.3 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1007ms\n\n', '64.233.163.4': 'PING 64.233.163.4 (64.233.163.4) 56(84) bytes of data.\n\n--- 64.233.163.4 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1008ms\n\n', '64.233.162.0': 'PING 64.233.162.0 (64.233.162.0) 56(84) bytes of data.\n\n--- 64.233.162.0 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1006ms\n\n', '64.233.162.3': 'PING 64.233.162.3 (64.233.162.3) 56(84) bytes of data.\n\n--- 64.233.162.3 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1006ms\n\n', '64.233.162.2': 'PING 64.233.162.2 (64.233.162.2) 56(84) bytes of data.\n\n--- 64.233.162.2 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1006ms\n\n', '64.233.164.3': 'PING 64.233.164.3 (64.233.164.3) 56(84) bytes of data.\n\n--- 64.233.164.3 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1006ms\n\n', '64.233.164.2': 'PING 64.233.164.2 (64.233.164.2) 56(84) bytes of data.\n\n--- 64.233.164.2 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1006ms\n\n', '64.233.164.1': 'PING 64.233.164.1 (64.233.164.1) 56(84) bytes of data.\n\n--- 64.233.164.1 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1006ms\n\n', '64.233.164.0': 'PING 64.233.164.0 (64.233.164.0) 56(84) bytes of data.\n\n--- 64.233.164.0 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1007ms\n\n', '64.233.164.4': 'PING 64.233.164.4 (64.233.164.4) 56(84) bytes of data.\n\n--- 64.233.164.4 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1006ms\n\n', '64.233.160.4': 'PING 64.233.160.4 (64.233.160.4) 56(84) bytes of data.\n\n--- 64.233.160.4 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1006ms\n\n', '64.233.160.1': 'PING 64.233.160.1 (64.233.160.1) 56(84) bytes of data.\n\n--- 64.233.160.1 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1007ms\n\n', '64.233.163.1': 'PING 64.233.163.1 (64.233.163.1) 56(84) bytes of data.\n\n--- 64.233.163.1 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1006ms\n\n', '64.233.161.2': 'PING 64.233.161.2 (64.233.161.2) 56(84) bytes of data.\n\n--- 64.233.161.2 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1009ms\n\n', '64.233.161.3': 'PING 64.233.161.3 (64.233.161.3) 56(84) bytes of data.\n\n--- 64.233.161.3 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1006ms\n\n', '64.233.161.0': 'PING 64.233.161.0 (64.233.161.0) 56(84) bytes of data.\n\n--- 64.233.161.0 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1006ms\n\n', '64.233.161.1': 'PING 64.233.161.1 (64.233.161.1) 56(84) bytes of data.\n\n--- 64.233.161.1 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 999ms\n\n', '64.233.160.3': 'PING 64.233.160.3 (64.233.160.3) 56(84) bytes of data.\n\n--- 64.233.160.3 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1006ms\n\n', '64.233.160.2': 'PING 64.233.160.2 (64.233.160.2) 56(84) bytes of data.\n\n--- 64.233.160.2 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1007ms\n\n', '64.233.161.4': 'PING 64.233.161.4 (64.233.161.4) 56(84) bytes of data.\n\n--- 64.233.161.4 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1007ms\n\n', '64.233.160.0': 'PING 64.233.160.0 (64.233.160.0) 56(84) bytes of data.\n\n--- 64.233.160.0 ping statistics ---\n2 packets transmitted, 0 received, 100% packet loss, time 1008ms\n\n'} 
Смежные вопросы