I'm the author of a package that's been around for about 10 years, and it has a function that addresses this question directly. Basically, if you are on a non-Windows system, it uses Popen
to access find
. However, if you are on Windows, it replicates find
with an efficient filesystem walker.
The code itself does not use a try
block… except in determining the operating system and thus steering you to the "Unix"-style find
or the hand-buillt find
. Timing tests showed that the try
was faster in determining the OS, so I did use one there (but nowhere else).
>>> import pox>>> pox.find('*python*', type='file', root=pox.homedir(), recurse=False)['/Users/mmckerns/.python']
And the doc…
>>> print pox.find.__doc__find(patterns[,root,recurse,type]); Get path to a file or directory patterns: name or partial name string of items to search for root: path string of top-level directory to search recurse: if True, recurse down from root directory type: item filter; one of {None, file, dir, link, socket, block, char} verbose: if True, be a little verbose about the search On some OS, recursion can be specified by recursion depth (an integer). patterns can be specified with basic pattern matching. Additionally, multiple patterns can be specified by splitting patterns with a ';' For example:>>> find('pox*', root='..') ['/Users/foo/pox/pox', '/Users/foo/pox/scripts/pox_launcher.py']>>> find('*shutils*;*init*') ['/Users/foo/pox/pox/shutils.py', '/Users/foo/pox/pox/__init__.py']>>>
The implementation, if you care to look, is here:https://github.com/uqfoundation/pox/blob/89f90fb308f285ca7a62eabe2c38acb87e89dad9/pox/shutils.py#L190