如何从输出中 select 特定文本?

How to select specific text from the output?

我正在通过从一个 csv 文件读取主机名来执行 nslookup,我想将 FQDN 写入另一个 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 文件中。

使用 resplit:

即可找到您要查找的数据
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))