2016-03-23 23 views
0

Adrese.txt dosyasındaki adresler için nslookup yapmaya çalışıyorum ve bunları .csv olarak kaydetmek istiyorum. Şu anda benim en büyük sorunum, sadece bir adres ve hepsi için nslookup yok olmasıdır. Sadece 0 ile çıkıyor ve dosyamda sadece bir adres var. Python’da yeniyim ve nasıl düzelteceğime dair hiçbir fikrim yok. Ayrıca çıktı dosyasına csv ile .txt değiştirilmesi de güzel olurdu.nslookup'a ihtiyacım var ve csv'ye göndereceğim adresler var

düzenleme: metin dosyası çalışmalarından elde adres, ikinci bölüm sorunudur, neden bilmiyorum

import subprocess 

f = open("adrese.txt") 
next = f.read() 
ip=[] 

while next != "": 
    ip.append(next) 
    next = f.read() 
file_ = open('nslookup.txt', 'w') 
for i in ip: 
    process = subprocess.Popen(["nslookup", i], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    output = process.communicate()[0] 
    file_.write(output) 
file_.close() 
+0

yerine nslookup arasında [dnspython] deneyin (http://www.dnspython.org/) – paj28

cevap

0

onun while next != "" siz istediğiniz yapıyor çünkü bu yaptığını nedeni.

yerine

, bu göz önünde bulundurun:

import subprocess 

with open('adrese.txt') as i, open('nslookup.txt', 'w') as o: 
    for line in i: 
    if line.strip(): # skips empty lines 
     proc = subprocess.Popen(["nslookup", line.strip()], 
           stdout=subprocess.PIPE, 
           stderr=subprocess.PIPE) 
     o.write('{}\n'.format(proc.communicate()[0])) 

print('Done') 
+0

teşekkürler, işe yaradı. Ayrıca adresimin dosyadan alınması çalışıyor, ben baskıyla kontrol ettim, ama problem kodun ikinci kısmındaydı ve nedenini bilmiyorum –

0

Sizin aslında adrese.txt tüm girişler arasında döngü değildir

ip = [] 
f = open("adrese.txt") 
for line in f: 
    ip.append(line) 
f.close() 

file_ = open('nslookup.txt', 'w') 
for i in ip: 
    process = subprocess.Popen(["nslookup", i], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
    output = process.communicate()[0] 
    file_.write(output) 
file_.close() 
0

Sen check_call kullanabilir ve doğrudan bir dosyaya stdout'u yönlendirebilirsiniz :

import subprocess 

with open('adrese.txt') as f, open('nslookup.txt', 'w') as out: 
    for line in map(str.rstrip, f): 
     if line: # skips empty lines 
      subprocess.check_call(["nslookup", line], 
            stdout=out) 

Stderr böylece olmayan herhangi sıfır çıkış durumu varsa sen yakalayabilirsiniz, onu yakalayan anlamı yok bir CalledProcessError:

import subprocess 

with open('adrese.txt') as f, open('nslookup.txt', 'w') as out: 
    for line in map(str.rstrip, f): 
     if line: # skips empty lines 
      try: 
       subprocess.check_call(["nslookup", line], 
             stdout=out) 
      except subprocess.CalledProcessError: 
       pass 
İlgili konular