python glob 子目录_python glob.glob-如何在不知道子目录中深度的...

现在,我使用子流程来调用find来完成工作,但是我追求的是Python式的工作方式.

这是当前代码:

cmd = "find /sys/devices/pci* | grep '/net/' |grep address"

p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)

在输出中,我收到以下列表:

[root@host1 ~]# find /sys/devices/pci* |grep '/net/'|grep 'address'

/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:00.0/0000:08:00.0/net/eth0/address

/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:01.0/0000:09:00.0/net/eth1/address

/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:02.0/0000:0a:00.0/net/rename4/address

/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:03.0/0000:0b:00.0/net/eth3/address

/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:04.0/0000:0c:00.0/net/eth4/address

/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:05.0/0000:0d:00.0/net/eth5/address

/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:06.0/0000:0e:00.0/net/eth6/address

/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:07.0/0000:0f:00.0/net/eth7/address

/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:08.0/0000:10:00.0/net/eth8/address

/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:09.0/0000:11:00.0/net/eth9/address

/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:0a.0/0000:12:00.0/net/eth10/address

/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:0b.0/0000:13:00.0/net/eth11/address

现在,如果我执行glob.glob(‘/ sys / devices / pci * / * / * / * / * / * / * / net /’),我会得到目录列表,甚至可以查找文件,但即使通过子流程,它肯定也比查找所需的时间更长.而且,结果集很大,而且我无法预先知道特定主机的体系结构是否具有相同的目录结构,因此我不知道要在glob.glob()中输入多少个星号.

我的问题是,如何重复简单的查找行为? grep命令可以实现,或者替代地,如果有一种更好的方法来查找主机拥有的所有NIC的所有MAC,不管它是否处于活动状态(我在这里寻找特定的MAC模式)

编辑:不应该使用glob,os.walk似乎正在完成这项工作:

>>> for root, dirs, names in os.walk('/sys/devices/'):

... if 'address' in names and 'pci' in root:

... f = open(str(root + '/address'), 'r')

... mac = f.readlines()[0].strip()

... f.close()

... print mac

... eth = root.split('/')[-1]

... print eth

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值