2011-07-27 3 views
1

검색 및 os.popen() + read() 및 subprocess.check_output() 두 가지 테스트가 모두 실행 된 후 거의 동일한 것으로 보입니다 폴더의 내용 os.popen() + read() 또는 subprocess.check_output() 중 하나를 개선하는 방법이 있습니까? 나는 ls 폴더 수와 출력을 읽어야하고 위의 두 가지 중 하나를 사용하는 것은 비슷하지만 프로파일 링 결과에 따라 주요 병목 현상을 나타냅니다.서브 프로세스에서 "ls"를 호출하는 것보다 빠르게 디렉토리 목록을 얻는 방법

+0

귀하의 질문의 제목이 내가 이해하고있는 내용을보다 분명하게 수정했습니다. 원본 제목은 하위 프로세스를 사용하고있는 것을 나타내지 않았으므로 사람들이 답장을하지 못하게 할 수 있습니다. – zwol

답변

5

os.listdir 및/또는 os.walkos.stat 제품군을 찾고 있습니다. 이들은 ls이 사용하는 것과 동일한 프리미티브 (파이썬 바인딩)이므로 ls의 결과를 구문 분석하여 수행 할 수있는 모든 작업을 수행 할 수 있습니다. os, os.pathstat 모듈이 제공하는 모든 것을주의 깊게 읽으시기 바랍니다. 당신이 할 외부 프로그램이 필요없는 다른 것들이있을 수 있습니다.

stat, the underlying system call의 설명서를 읽어야합니다. C 지향이지만 실제로는 os.stat이 무엇인지 이해하는 데 도움이됩니다.

+0

오, 그래, os.listdir 정확히 내가 필요로하는 것입니다! 이제 os 모듈에 대해 철저하게 읽을 것입니다 ... 어떤 이유로 저는 서브 프로세스 문서 만 검사했습니다. 고맙습니다! – melnikovkolya

2

os.listdir으로 디렉토리 내용을 직접 읽지 않는 이유는 무엇입니까? 왜 ls으로 외출해야합니까? 파일 이름 외에도 파일에 대한 자세한 정보가 필요하면 os.stat을 사용할 수도 있습니다. 서브 프로세스를 작성하는 것보다 시스템 호출을 직접 수행하는 것이 훨씬 효율적입니다.

전체적으로 디렉토리 탐색을 수행하는 경우 os.walk이 있습니다. shutil module에는 유용한 기능이 있습니다.

+0

감사합니다. 지금하고있다 :) – melnikovkolya

+0

'glob' 모듈은 당신이 필요로하는 것에 따라 유용한 바로 가기를 제공한다. –

0

사용 글로브는 :

>>> from glob import glob 
>>> glob('*') 

구문은 동일합니다.

glob('*.txt') # the same as "ls *.txt" 
관련 문제