Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的命令输出解析_Python_Python 3.x - Fatal编程技术网

Python中的命令输出解析

Python中的命令输出解析,python,python-3.x,Python,Python 3.x,我试图在Windows7上编写一个Python脚本,它读取命令ipconfig/displaydns的输出,并尝试从输出中获取一些值 ipconfig/displaydns“的输出如下所示 Windows IP Configuration 9.a.c.e.x-0.19-430f5091.531.1518.1b8d.2f4a.210.0.k1m2t5a3245k242qmfp75spjkv.avts. Record Name . . . . . : 9.a.c.e.x-0.19-430f509

我试图在Windows7上编写一个Python脚本,它读取命令
ipconfig/displaydns
的输出,并尝试从输出中获取一些值

ipconfig/displaydns“
的输出如下所示

Windows IP Configuration

9.a.c.e.x-0.19-430f5091.531.1518.1b8d.2f4a.210.0.k1m2t5a3245k242qmfp75spjkv.avts.

Record Name . . . . . : 9.a.c.e.x-0.19-430f5091.531.1518.1b8d.2f4a.210.0.k1m2t5a3245k242qmfp75spjkv.avts.
Record Type . . . . . : 1
Time To Live  . . . . : 294
Data Length . . . . . : 4
Section . . . . . . . : Answer
A (Host) Record . . . : 127.0.0.16
我获取此输出并将其保存在变量中,如下所示

output = subprocess.check_output("ipconfig /displaydns", shell=True)
当我打印“输出”时,我得到以下信息

b'\r\nWindows IP Configuration\r\n\r\n   9.a.c.e.x-0.19-430f5091.531.1518.1b8d.2f4a.210.0.k1m2t5a3245k242qmfp75spjkv.avts.\r\n    ----------------------------------------\r\n    Record Name . . . . . : 9.a.c.e.x-0.19-430f5091.531.1518.1b8d.2f4a.210.0.k1m2t5a3245k242qmfp75spjkv.avts.\r\n    Record Type . . . . . : 1\r\n    Time To Live  . . . . : 289\r\n    Data Length . . . . . : 4\r\n    Section . . . . . . . : Answer\r\n    A (Host) Record . . . : 127.0 .0.16\r\n\r\n\r\n'
从这个输出中,我对
A(主机)记录
记录名称
的值感兴趣,它们分别是
127.0.0.16
9.A.c.e.x-0.19-430f5091.531.1518.1b8d.2f4a.210.0.k1m2t5a3245k242qmfp75spjkv.avts.

我将如何在Python中实现它

import subprocess
output = subprocess.check_output("ipconfig /displaydns", shell=True)
result = {}
for row in output.split('\n'):
    if ': ' in row:
        key, value = row.split(': ')
        result[key.strip(' .')] = value.strip()

print(result)
print(result['A (Host) Record'])
给出:

{'A (Host) Record': '127.0 .0.16', 'Data Length': '4', 'Section': 'Answer', 'Record Name': '9.a.c.e.x-0.19-430f5091.531.1518.1b8d.2f4a.210.0.k1m2t5a3245k242qmfp75spjkv.avts.', 'Time To Live': '289', 'Record Type': '1'}
127.0 .0.16

另一个解决办法是: (当我在脑海中想到这一点时,我认为它会更紧凑。。它不是,但无论如何,它是一种调用外部命令的不同方式,在这里,您可以控制错误和输出(您可以区分两者))


我还将使用
shell=True
添加这一点,特别是当与用户输入结合使用时。它确实添加了一些“隐藏魔法”,使某些事情更简单或更自然。但在大多数情况下,您将希望执行
subprocess.Popen([“ipconfig”,“/displaydns”],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
取而代之。

输出.拆分(“”)
?(编辑:编辑后,此项无效)@user2253876不客气,别忘了标记您的答案(这让我很高兴):)
import subprocess
cmdpipe = subprocess.Popen("ipconfig /displaydns", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
result = {}
for row in cmdpipe.stdout.readline():
    if ': ' in row:
        key, value = row.split(': ')
        result[key.strip(' .')] = value.strip()

# You need to close the file handles, as they will stay open "forever" otherwise.
cmdpipe.stdout.close()
cmdpipe.stderr.close()

print(result)
print(result['A (Host) Record'])