지금 당장은 서브 프로세스를 사용하여 find
을 호출합니다.하지만 작업을 수행하는 파이썬 방법을 따릅니다. 내가 glob.glob('/sys/devices/pci*/*/*/*/*/*/*/net/')
을 할 경우 내가 디렉토리의 목록을받을 수 있나요,python glob.glob - 특정 파일 (또는 파일 목록)을 찾아내는 방법을 subdirs에서 얼마나 깊게 알 수 있습니까?
[[email protected] ~]# 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
지금, 나는 심지어 수 : 나는 다음과 같은 목록이 표시 출력에
cmd = "find /sys/devices/pci* | grep '/net/' |grep address"
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
:
여기에 현재 코드입니다 파일을 찾으십시오. 그러나 심지어 서브 프로세스를 통해서도 find
보다 오래 걸리는 것으로 보입니다. 또한 결과 집합은 매우 거대하며 특정 호스트의 아키텍처가 동일한 디렉토리 구조를 가질 지 여부를 미리 알 수 없으므로 glob.glob()
에 입력 할 별표 수를 알 수 없습니다.
내 질문에 간단한 find | grep
명령이 수행하는 동작을 어떻게 반복 할 수 있습니까, 아니면 호스트가 가지고있는 모든 NIC의 모든 MAC을 찾는 더 좋은 방법이 있다면 (예 : 여기에 특정 MAC 패턴)를 찾고 있어요
편집 : 글로브를 사용하지 않았을 경우, 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
덕분에,이 일을 내가 편집 – dyasny
큰 Iin에 답을 추가 :
위의 링크에서 http://docs.python.org/library/os.html#os.walk, 여기에 특정 디렉토리를 건너 뛸 수있는 방법입니다! 해피 코딩! – bohney
일부 하위 디렉토리에 찾고있는 파일이 포함되어 있지 않다면'dirs' 변수에서'del'하여 처리되지 않도록 할 수 있습니다. 예를 들어,'/ sys/devices/pci *'와 일치하지 않는 디렉토리를 모두 건너 뛸 수 있습니다. –