2016-06-27 10 views
0

Ich versuche Schleife zu ping durch, es ist das Problem nur auf die letzte Nummer in diesem Fall geschehen die sich nur auf die xxx4 AdressePython - ping in for-Schleife

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

Was genau ist die Frage? – edwinksl

+3

Sie öffnen '1.txt' in' w' Modus, was bedeutet, dass es jedes Mal neu durch den Loop erstellt wird. Die Datei enthält nur die Ergebnisse des letzten Befehls. –

+0

Mein schlechtes hat es in ''+ a'' anstelle von' w'' geändert – None

Antwort

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() 

Versuchen Sie, Ihren Code zu ändern

+0

Die Datei muss im Binärmodus sein, z. 'fiw = open ('1.txt', 'wb')', und Sie müssen nur die Standardausgabe vom Tupel erhalten, z. 'stdout, stderr = p.communicate()', und schreibe es als 'fiw.write (stdout)'. (Wenn die Datei im Textmodus ist, muss "stdout" decodiert werden; "str" ​​ist nur der Ausdruck eines "bytes" -Objekts.) Da Sie aber gerade die Ausgabe direkt in die Datei schreiben, empfehle ich das Überspringen das Rohr, z 'subprocess.call (cmd, stdout = fiw)'. – eryksun

+0

Ausgabe in eine Textdatei ist eine der Funktionen Ich möchte 2 Pipe die ips, die mit UP irgendwelche Vorschläge beantwortet? – None

0

verändert die fiw = open("1.txt", 'w') getan Ping 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)) 

in eine Textdatei outputing ist eine der Funktionen, die ich möchte 2 Rohr die IPs, die mit bis reagierte