Как выбрать конкретный текст из вывода? - PullRequest
0 голосов
/ 05 июня 2018

Я делаю nslookup, читая имя хоста из одного файла CSV, и я хочу записать полное доменное имя в другой файл CSV.

Это мой код:

import subprocess

with open('csv1.csv', 'r') as i, open('csv2.csv', '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')

Проблема, с которой я сталкиваюсь, заключается в том, что она дает всю подробную информацию аналогично, когда выполняется в cmd-> nslookup, например, 'SERVER', 'ADDRESS','FQDN' и его IP-адрес Вот пример одного из имен хостов:

(b'Server:  anything.na.com\r\nAddress:  10.3.56.7\r\n\r\nName:    ABCD12.na.com\r\nAddress:  10.4.67.8\r\nAliases:  abcd12.na.com\r\n\r\n'

Я хочу извлечь здесь только имя FQDN в файл csv.

1 Ответ

0 голосов
/ 05 июня 2018

Просто найдите данные, которые вы ищете, используя re или split:

import subprocess

with open('csv1.csv', 'r') as i, open('csv2.csv', '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)
        stdout_data, stderr_data = proc.communicate(0)
        fqdn = stdout_data.split(b'Server:  ')[1].split(b'\r\n')[0]
        o.write('{}\n'.format(fqdn))
...