简体   繁体   English

在python中列出理解错误?

[英]List comprehension in python error?

I want to get the result of nmcli (linux) in a 3D list in python. 我想在python的3D列表中获取nmcli(linux)的结果。

The sample output of nmcli device show is nmcli device show的示例输出nmcli device show

GENERAL.DEVICE: wlan0 通用设备:wlan0
GENERAL.TYPE: wifi 通用类型:wifi
GENERAL.HWADDR: ::::: GENERAL.HWADDR ::::::
GENERAL.MTU: 1500 一般MTU:1500
GENERAL.STATE: 100 (connected) 一般状态:100(已连接)
GENERAL.CONNECTION: 通用连接:
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2 GENERAL.CON-PATH:/ org / freedesktop / NetworkManager / ActiveConnection / 2
IP4.ADDRESS[1]: 192.168.1.106/16 IP4.ADDRESS [1]:192.168.1.106/16
IP4.GATEWAY: 192.168.1.1 IP4网关:192.168.1.1
IP4.ROUTE[1]: dst = 0.0.0.0/0, nh = 192.168.1.1, mt = 600 IP4.ROUTE [1]:dst = 0.0.0.0/0,nh = 192.168.1.1,mt = 600
IP4.ROUTE[2]: dst = 192.168.0.0/16, nh = 0.0.0.0, mt = 600 IP4.ROUTE [2]:dst = 192.168.0.0/16,nh = 0.0.0.0,mt = 600
IP4.DNS[1]: 192.168.1.1 IP4.DNS [1]:192.168.1.1
IP6.ADDRESS[1]: :::::::/ IP6.ADDRESS [1]:::::::: /
IP6.ADDRESS[2]: :::::/ IP6.ADDRESS [2]:::::: /
IP6.GATEWAY: ::::: IP6网关::::::
IP6.ROUTE[1]: dst = :::::/, nh = ::, mt = 600 IP6.ROUTE [1]:dst = ::::: //,nh = ::,mt = 600
IP6.ROUTE[2]: dst = ::/0, nh = fe80::30ae:bfff:fe20:64d, mt = 600 IP6.ROUTE [2]:dst = :: / 0,nh = fe80 :: 30ae:bfff:fe20:64d,mt = 600
IP6.ROUTE[3]: dst = ::/, nh = ::, mt = 256, table=255 IP6.ROUTE [3]:dst = :: /,nh = ::,mt = 256,表格= 255
IP6.ROUTE[4]: dst = ::/, nh = ::, mt = 256 IP6.ROUTE [4]:dst = :: /,nh = ::,mt = 256
IP6.ROUTE[5]: dst = ::/, nh = ::, mt = 600 IP6.ROUTE [5]:dst = :: /,nh = ::,mt = 600
IP6.DNS[1]: ::::: IP6.DNS [1]::::::
IP6.DNS[2]: ::::::: IP6.DNS [2]::::::::

GENERAL.DEVICE: eth0 通用设备:eth0
GENERAL.TYPE: ethernet 通用类型:以太网
GENERAL.HWADDR: ::::: GENERAL.HWADDR ::::::
GENERAL.MTU: 1500 一般MTU:1500
GENERAL.STATE: 20 (unavailable) 一般状态:20(不可用)
GENERAL.CONNECTION: -- 一般连接:-
GENERAL.CON-PATH: -- 一般路径:-
WIRED-PROPERTIES.CARRIER: off WIRED-PROPERTIES.CARRIER:关闭

GENERAL.DEVICE: lo 通用设备:lo
GENERAL.TYPE: loopback GENERAL.TYPE:环回
GENERAL.HWADDR: 00:00:00:00:00:00 一般.HWADDR:00:00:00:00:00:00
GENERAL.MTU: 65536 一般MTU:65536
GENERAL.STATE: 10 (unmanaged) 一般状态:10(非托管)
GENERAL.CONNECTION: -- 一般连接:-
GENERAL.CON-PATH: -- 一般路径:-
IP4.ADDRESS[1]: 127.0.0.1/8 IP4.ADDRESS [1]:127.0.0.1/8
IP4.GATEWAY: -- IP4网关:-
IP6.ADDRESS[1]: ::1/128 IP6.ADDRESS [1]::: 1/128
IP6.GATEWAY: -- IP6网关:-

As you can see there are three interfaces : wlan0 , eth0 and lo. 如您所见,存在三个接口:wlan0,eth0和lo。 I want a list of columns in a list of rows in a list of interfaces (3D). 我想要接口列表(3D)中的行列表中的列列表。

I used subprocess to get the result 我用子过程来得到结果

r1 = subprocess.run(['nmcli', 'device', 'show'], stdout=subprocess.PIPE)
r2 = [y.split() for y in [z.split('\n') for z in r1.split('\n\n')]]

But I get the following error 但我收到以下错误

  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <listcom>
AttributeError: 'list' object has no attribute 'split'

Any suggestions? 有什么建议么?

PS: I ran that on python 3.6.3 shell PS:我在python 3.6.3 shell上运行了

The result of [z.split('\\n') for z in r1.split('\\n\\n')] is a list of lists, so when you iterate over it you are trying to split a list instead of a string. [z.split('\\n') for z in r1.split('\\n\\n')][z.split('\\n') for z in r1.split('\\n\\n')]的结果是一个列表列表,因此在对其进行迭代时,您尝试拆分列表而不是列表串。 The error is in y.split() . 错误在y.split()

I think what you want is: 我认为您想要的是:

r2 = [[y.split() for y in z.split('\n')] for z in r1.split('\n\n')]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM