2013-04-23 24 views
5

Windows 7でコマンドipconfig /displaydnsの出力を読み取り、出力から値を取得しようとするPythonスクリプトを作成しようとしています。Pythonでのコマンド出力の解析

ipconfig /displaydns"の出力は、このようなもので、

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 

私はこの出力を取って、以下のように変数に保存しています、

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

私は印刷

「出力」私を得ます続く

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' 

この出力からは、の値に興味がありますおよびRecord Nameはそれぞれ127.0.0.16および9.a.c.e.x-0.19-430f5091.531.1518.1b8d.2f4a.210.0.k1m2t5a3245k242qmfp75spjkv.avts.である。

私はPythonでどのようにしますか?

+0

'o utput.split( '') '? (編集:編集後、これは無効です) – Torxed

答えて

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']) 

ができます:

{'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 

別の解決策は、に次のようになります。私は私の頭の中でこの考えたときに (、私はそれがよりコンパクトになるだろうと思った...それはありませんでしたが、とにかく、それは外部コマンドを呼び出す別の方法で、エラーと出力の制御を得ます(2つを区別できます)。

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

ありがとうございます。それは完全に動作します。どうもありがとう。 – user2253876

+0

@ user2253876ようこそ、あなたの答えをマークすることを忘れないでください(それは私の中に喜びを与える:)) – Torxed

関連する問題