2016-06-27 5 views
0

я пытаюсь пинговать через цикл, проблема это делается только для последнего номера в этом случае пинг сделано только по адресу xxx4Python - пинг в течение цикла

import subprocess 
import socket 

ipl = socket.gethostbyname(socket.gethostname()) 
seg1, seg2, seg3, seg4 = ipl.split(".") 
stip = seg1 + "." + seg2 + "." + seg3 + "." 

i = 0 
for i in range(1,5): 
    cmd = "ping -n 1 " + stip + str(i) 
    print(cmd) 
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    (stdout) = p.communicate() 
    fiw = open("1.txt", 'w') 
    fiw.write(str(stdout)) 
+1

В чем вопрос? – edwinksl

+3

Вы открываете '1.txt' в режиме' w', что означает, что он создается каждый раз через цикл. В результате файл получит только результаты последней команды. –

+0

Неплохо изменил его на '' + a'' вместо ''w'' – None

ответ

0
fiw = open("1.txt",'w') 
for i in range(1,5): 
    cmd = "ping -n 1 " + stip + str(i) 
    print(cmd) 
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    (stdout) = p.communicate() 
    fiw.write(str(stdout)) 
fiw.close() 

Попробуйте изменить код

+0

Файл должен быть в двоичном режиме, например. 'fiw = open ('1.txt', 'wb')', и вам нужно получить только стандартный вывод из кортежа, например. 'stdout, stderr = p.communicate()' и записать его как 'fiw.write (stdout)'. (Если файл находится в текстовом режиме, тогда 'stdout' нужно декодировать,' str' - это просто представление объекта 'bytes'.) Но поскольку вы просто записываете вывод непосредственно в файл, я предлагаю пропустить труба, например 'subprocess.call (cmd, stdout = fiw)'. – eryksun

+0

Вывод в текстовый файл является одной из функций, я хочу, чтобы 2 трубки ips, которые ответили UP любыми предложениями? – None

0

изменил fiw = open("1.txt", 'w') к fiw = open("1.txt", '+a')

import subprocess 
import socket 

ipl = socket.gethostbyname(socket.gethostname()) 
seg1, seg2, seg3, seg4 = ipl.split(".") 
stip = seg1 + "." + seg2 + "." + seg3 + "." 

i = 0 
for i in range(1,5): 
    cmd = "ping -n 1 " + stip + str(i) 
    print(cmd) 
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    (stdout) = p.communicate() 
    fiw = open("1.txt", 'w') 
    fiw.write(str(stdout)) 

Outputing в текстовый файл является одной из функций я хочу 2 трубы ИПС, которые отозвались с UP

Смежные вопросы