如何将子进程输出字符串格式?

2024-09-25 00:33:38 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我在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'

有人能帮我把结果格式化如下。在

^{pr2}$

Tags: 模块comserverwwwgoogleinternalsubprocessnslookup
2条回答

您可以使用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])]))

给你:

^{pr2}$

Address:可由DNS:替换为.replace()

可以通过将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))

输出:

^{pr2}$

相关问题 更多 >