2013-04-23 15 views
5

Sto provando a scrivere uno script Python su Windows 7, che legge l'output del comando ipconfig /displaydns e tenta di ottenere alcuni valori dall'output.Output dell'analisi di comando in Python

L'uscita del ipconfig /displaydns" è qualcosa di simile,

Windows IP Configuration 

9.a.c.e.x-0.19-430f5091.531.1518.1b8d.2f4a.210.0.k1m2t5a3245k242qmfp75spjkv.avts. 

Record Name . . . . . : 9.a.c.e.x-0.19-430f5091.531.1518.1b8d.2f4a.210.0.k1m2t5a3245k242qmfp75spjkv.avts. 
Record Type . . . . . : 1 
Time To Live . . . . : 294 
Data Length . . . . . : 4 
Section . . . . . . . : Answer 
A (Host) Record . . . : 127.0.0.16 

sto prendendo questa uscita e salvandolo in una variabile come sotto,

output = subprocess.check_output("ipconfig /displaydns", shell=True) 

Quando stampo "output" Ho la seguente

b'\r\nWindows IP Configuration\r\n\r\n 9.a.c.e.x-0.19-430f5091.531.1518.1b8d.2f4a.210.0.k1m2t5a3245k242qmfp75spjkv.avts.\r\n ----------------------------------------\r\n Record Name . . . . . : 9.a.c.e.x-0.19-430f5091.531.1518.1b8d.2f4a.210.0.k1m2t5a3245k242qmfp75spjkv.avts.\r\n Record Type . . . . . : 1\r\n Time To Live . . . . : 289\r\n Data Length . . . . . : 4\r\n Section . . . . . . . : Answer\r\n A (Host) Record . . . : 127.0 .0.16\r\n\r\n\r\n' 

Da questo output sono interessato ai valori per A (Host) Record e Record Name che sono rispettivamente 127.0.0.16 e 9.a.c.e.x-0.19-430f5091.531.1518.1b8d.2f4a.210.0.k1m2t5a3245k242qmfp75spjkv.avts..

Come lo faccio in Python?

+0

'o utput.split ('') '? (Modifica: dopo la modifica, questo non è valido) – Torxed

risposta

11
import subprocess 
output = subprocess.check_output("ipconfig /displaydns", shell=True) 
result = {} 
for row in output.split('\n'): 
    if ': ' in row: 
     key, value = row.split(': ') 
     result[key.strip(' .')] = value.strip() 

print(result) 
print(result['A (Host) Record']) 

dà:

{'A (Host) Record': '127.0 .0.16', 'Data Length': '4', 'Section': 'Answer', 'Record Name': '9.a.c.e.x-0.19-430f5091.531.1518.1b8d.2f4a.210.0.k1m2t5a3245k242qmfp75spjkv.avts.', 'Time To Live': '289', 'Record Type': '1'} 
127.0 .0.16 

Un'altra soluzione potrebbe essere quella di: (quando ho pensato a questo nella mia testa, ho pensato che sarebbe stato più compatto .. non è stato, ma in ogni caso, si tratta di un modo diverso di chiamare il comando esterno in cui si ottiene il controllo degli errori e di uscita (si può differntiate i due))

import subprocess 
cmdpipe = subprocess.Popen("ipconfig /displaydns", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) 
result = {} 
for row in cmdpipe.stdout.readline(): 
    if ': ' in row: 
     key, value = row.split(': ') 
     result[key.strip(' .')] = value.strip() 

print(result) 
print(result['A (Host) Record']) 
+0

Grazie. Funziona perfettamente. Grazie mille. – user2253876

+0

@ user2253876 Prego, non dimenticare di segnare la tua risposta (mi dà piacere dentro) :) – Torxed