2017-11-15 8 views
-2

以下は、Pythonでsubprocessモジュールを使用したnslookupの結果です。文字列形式のサブプロセス出力はどうですか?

b'Server: server.internal\r\nAddress: 192.168.0.2\r\n\r\nName:  
www.google.com\r\nAddresses: 2404:6800:4007:800::2004\r\n\t 
216.58.197.68\r\n\r\n' 

次のように結果をフォーマットするのに手伝ってください。

Server: server.internal 
Name: www.google.com 
DNS: 192.168.0.2 
Addresses: 2404:6800:4007:800::2004 , 216.58.197.68 
+1

改行などのn \印刷するには、 'print'を使用してください。 – Vinny

+1

まずは自分で試してみてください。あなたが試したことと動作していないことを教えてください。インターネットで数分間探しても、これは難しい問題ではありません。 –

+0

'universalnewlines = True'を' subprocess.Popen'(または 'run'、' check_output'などの等価ヘルパー関数)に渡します。それはあなたの問題の99%を修正するでしょう(あなたの貼り付けられた 'bytes'リテラルは無効なので、そこにない改行を追加している可能性があります)。 – ShadowRanger

答えて

1

によってDNS:置き換えることができますnslookupの行を辞書に入れ、それを使って出力をフォーマットします。

nslookup = (b'Server: server.internal\r\nAddress: 192.168.0.2\r\n\r\n' 
      b'Name: www.google.com\r\nAddresses: 2404:6800:4007:800::2004\r\n' 
      b'\t216.58.197.68\r\n\r\n') 

info = {} 
for line in nslookup.decode().splitlines(): 
    tokens = line.split() 
    if len(tokens) == 2: 
     if tokens[0] == 'Addresses:': 
      info.setdefault('Addresses', []).append(tokens[1]) # Without ":" 
     else: 
      info[tokens[0].rstrip(':')] = tokens[1] 
    elif len(tokens) == 1: 
     info['Addresses'].append(tokens[0]) 

info['Addresses'] = ', '.join(info['Addresses']) # Format and convert to string. 

print('''\ 
Server: {Server} 
Name: {Name} 
DNS: {Address} 
Addresses: {Addresses}'''.format(**info)) 

出力:

Server: server.internal 
Name: www.google.com 
DNS: 192.168.0.2 
Addresses: 2404:6800:4007:800::2004, 216.58.197.68 
0

Pythonのunicode_escapeを使用して変換することができます。結果は行に分割し、次のように再組み立てすることができます

nslookup = b'Server: server.internal\r\nAddress: 192.168.0.2\r\n\r\nName: www.google.com\r\nAddresses: 2404:6800:4007:800::2004\r\n\t216.58.197.68\r\n\r\n' 
lines = [line.strip('\t').replace(' ', ' ') for line in nslookup.decode('unicode_escape').splitlines()] 
print('\n'.join([lines[0], lines[3], lines[1], '{} , {}'.format(lines[4], lines[5])])) 

あなたを与える:

Server: server.internal 
Name: www.google.com 
Address: 192.168.0.2 
Addresses: 2404:6800:4007:800::2004 , 216.58.197.68 

​​あなたは構文解析によってそれを行うことができ、最終的な.replace()

+0

ありがとうございます。これはとても役に立ちました – Vaisakh

関連する問題