Python 如何对子流程输出进行字符串格式化?
下面是我在Python中使用Python 如何对子流程输出进行字符串格式化?,python,python-3.x,Python,Python 3.x,下面是我在Python中使用子流程模块的nslookup结果 b'Server:Server.internal\r\n地址:192.168.0.2\r\n\r\n名称: www.google.com\r\n地址:2404:6800:4007:800::2004\r\n\t 216.58.197.68\r\n\r\n' 请有人帮我把结果格式化如下 Server:Server.internal 名称:www.google.com 域名:192.168.0.2 地址:2404:6800:4007:8
子流程
模块的nslookup结果
b'Server:Server.internal\r\n地址:192.168.0.2\r\n\r\n名称:
www.google.com\r\n地址:2404:6800:4007:800::2004\r\n\t
216.58.197.68\r\n\r\n'
请有人帮我把结果格式化如下
Server:Server.internal
名称:www.google.com
域名:192.168.0.2
地址:2404:6800:4007:800::2004216.58.197.68
您可以使用Python的unicode\u 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
名称:www.google.com
地址:192.168.0.2
地址:2404:6800:4007:800::2004216.58.197.68
地址:
可以由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))
输出:
Server:Server.internal
名称:www.google.com
域名:192.168.0.2
地址:2404:6800:4007:800::2004216.58.197.68
使用print
以换行方式打印。\n您必须先自己尝试。告诉我们你尝试了什么,什么不起作用。如果您在internet上查找几分钟,这不是一个难题。将universalnewlines=True
传递到子流程.Popen
(或类似的辅助函数,如run
,check\u output
,等等)。这将解决99%的问题(可能更多;粘贴的bytes
literal无效,因此您可能添加了不存在的换行符)。