x
是一个带有\r\n
行分隔符的字符串。每个“行”不以标准方式(例如制表符)分隔,而是由多个空格分隔。有probably an elegant way to handle this。
第一行是空的,第二行是标题,第三行只是-----
的一行,所以你需要从第4行到最后。
import subprocess
import re
p = subprocess.Popen('netsh interface show interface',stdout=subprocess.PIPE)
[x, err] = p.communicate()
items = x.split('\r\n')
for itm in items[3:]:
## convert this to a delimited line for ease of processing:
itm = re.sub('\s\s+', '\t', itm)
print(itm.split('\t')[-1])
结果:
或进一步细化:
import subprocess
import re
p = subprocess.Popen('netsh interface show interface',stdout=subprocess.PIPE)
[x, err] = p.communicate()
items = x.split('\r\n')
print('\n'.join(map(lambda itm: re.sub('\s\s+', '\t', itm).split('\t')[-1], items[3:])))
从评论更新
所以它瓦特虽然如果我喜欢4接口和我只想读第一个,那么最好的方法是什么?我试图寻找正则表达式,但无法找到一种方法来保持第一行并从结果中移除其余部分。
你不需要这个正则表达式。我唯一使用正则表达式是将多个空间字符的任何实例转换为\t
(制表符)字符,以便我们可以使用split
轻松解析这些行。否则,你观察到的,它会产生输出,如'Local', 'Area', 'Network'
所以我上面假设你想打印出名字的所有,我们确定这些项目的标准输出的4线开始的方法。这就是为什么我们做的:
for itm in items[3:]:
该行表示,“遍历每个事情在items
,从第三事情直到最后的事情。” This is a concept known as slicing可以在任何序列对象上进行(字符串,元组,列表等)
我有下面的连接,只是想知道第一连接名称,并从我的结果中删除休息。
所以我们不再需要迭代(这是如果我们需要处理每个项目完成)。我们知道,我们只需要一个项目,它是第一项目,这样你就可以修改为:
import subprocess
import re
p = subprocess.Popen('netsh interface show interface',stdout=subprocess.PIPE)
[x, err] = p.communicate()
## This gets the line-delimited list from stdout
items = x.split('\r\n')
## Now, we only need the fourth item in that list
itm = items[3]
## convert this to a delimited line for ease of processing:
itm = re.sub('\s\s+', '\t', itm)
## print to console
print(itm.split('\t')[-1])
或者,更简洁:
import subprocess
import re
p = subprocess.Popen('netsh interface show interface',stdout=subprocess.PIPE)
[x, err] = p.communicate()
## This gets the line-delimited list from stdout
items = x.split('\r\n')
"""
Now, we only need the fourth item in that list
convert this to a delimited line for ease of processing,
and finally print to console
This is a one-line statement that does what 3 lines did above
"""
print(re.sub('\s\s+', '\t', items[3]).split('\t')[-1])
有你有任何机会尝试解决方案如下 –
@DavidZemens是的,我还想再深入一层。 所以它按预期工作,但如果我有4个接口并且我只想读第一个,那么最好的方法是什么?我试图寻找正则表达式,但无法找到一种方法来保持第一行并从结果中移除其余部分。我正在学习编程,并在提问之前尽力而为。 例如:我有下面的连接,只是想知道第一个连接名称,并从我的结果中删除休息。 端口Ethernet 的Ethernet2 为Ethernet3 以太网端口Ethernet4 – pylearner