
which
Note: This project has been moved to trentm/which on GitHub.
which.py
is a small GNU-which replacement. It has the following
features:
- it is portable (Windows, Linux, Mac OS X, Un*x);
- it understands PATHEXT and "App Paths" registration on Windows (i.e. it will find everything that
start
does from the command shell); - it can print all matches on the PATH;
- it can note "near misses" on the PATH (e.g. files that match but may not, say, have execute permissions); and
- it can be used as a Python module.
Getting Started
Currently the best intro to using which.py
as a module is its module documentation. Either install which.py
and run:
pydoc which
take a look at which.py
in your editor or TODO [path/to/which.py here], or read on. Most commonly you'll use the which()
method to find an executable:
```
import which which.which("perl") '/usr/local/bin/perl' ```
Or you might want to know if you have multiple versions on your path:
```
which.whichall("perl") ['/usr/local/bin/perl', '/usr/bin/perl'] ```
Use verbose
to see where your executable is being found. (On Windows this might not always be so obvious as your PATH environment variable. There is an "App Paths" area of the registry where the start
command will find "registered" executables -- which.py
mimics this.)
```
which.whichall("perl", verbose=True) [('/usr/local/bin/perl', 'from PATH element 10'), ('/usr/bin/perl', 'from PATH element 15')] ```
You can restrict the searched path:
```
which.whichall("perl", path=["/usr/bin"]) ['/usr/bin/perl'] ```
There is a generator interface:
```
for perl in which.whichgen("perl"): ... print "found a perl here:", perl ... found a perl here: /usr/local/bin/perl found a perl here: /usr/bin/perl ```
An exception is raised if your executable is not found:
```
which.which("fuzzywuzzy") Traceback (most recent call last): ... which.WhichError: Could not find 'fuzzywuzzy' on the path.
```
There are some other options too:
```
help(which.which) ... ```
Run which --help
to see command-line usage:
``` $ which --help Show the full path of commands.
Usage: which [...] [...]
Options: -h, --help Print this help and exit. -V, --version Print the version info and exit.
-a, --all Print *all* matching paths.
-v, --verbose Print out how matches were located and
show near misses on stderr.
-q, --quiet Just print out matches. I.e., do not print out
near misses.
-p <altpath>, --path=<altpath>
An alternative path (list of directories) may
be specified for searching.
-e <exts>, --exts=<exts>
Specify a list of extensions to consider instead
of the usual list (';'-separate list, Windows
only).
Show the full path to the program that would be run for each given command name, if any. Which, like GNU's which, returns the number of failed arguments, or -1 when no was given.
Near misses include duplicates, non-regular files and (on Un*x) files without executable access. ```