2016-06-27 149 views
0

我嘗試ping通的循環,這個問題的時候纔會這麼做的最後一個數字 在這種情況下,只有做了XXX4地址的Python - 平在for循環

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

你在'w'模式下打開'1.txt',這意味着它每次都通過循環創建。該文件將僅以最終命令的結果結束。 –

+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() 
響應的IPS

嘗試變更您的代碼

+0

該文件需要處於二進制模式,例如, 'fiw = open('1.txt','wb')',你只需要得到元組的標準輸出,例如'stdout,stderr = p.communicate()',並將其寫爲'fiw.write(stdout)'。 (如果文件處於文本模式,那麼'stdout'需要被解碼;'str'只是'bytes'對象的repr)。但是由於你只是直接將輸出寫入文件,我建議跳過管道,例如'subprocess.call(cmd,stdout = fiw)'。 – eryksun

+0

輸出到一個文本文件是我想要2管道ips的功能之一,它迴應任何建議的功能之一? – 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