123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- which.py -- a portable GNU which replacement
- ============================================
- Download the latest which.py packages from here:
- (source) http://trentm.com/downloads/which/1.1.0/which-1.1.0.zip
- Home : http://trentm.com/projects/which/
- License : MIT (see LICENSE.txt)
- Platforms : Windows, Linux, Mac OS X, Unix
- Current Version : 1.1
- Dev Status : mature, has been heavily used in a commercial product for
- over 2 years
- Requirements : Python >= 2.3 (http://www.activestate.com/ActivePython/)
- What's new?
- -----------
- I have moved hosting of `which.py` from my old [Starship
- pages](http://starship.python.net/~tmick/) to this site. These starter
- docs have been improved a little bit. See the [Change Log](#changelog)
- below for more.
- **WARNING**: If you are upgrading your `which.py` and you also use my
- [process.py](../process/) module, you must upgrade `process.py` as well
- because of the `_version_/__version__` change in v1.1.0.
- Why which.py?
- -------------
- `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.
- I also would be happy to have this be a replacement for the `which.py` in the
- Python CVS tree at `dist/src/Tools/scripts/which.py` which is
- Unix-specific and not usable as a module; and perhaps for inclusion in
- the stdlib.
- Please send any feedback to [Trent Mick](mailto:TrentM@ActiveState.com).
- Install Notes
- -------------
- Download the latest `which.py` source package, unzip it, and run
- `python setup.py install`:
- unzip which-1.1.0.zip
- cd which-1.1.0
- python setup.py install
- If your install fails then please visit [the Troubleshooting
- FAQ](http://trentm.com/faq.html#troubleshooting-python-package-installation).
- `which.py` can be used both as a module and as a script. By default,
- `which.py` will be installed into your Python's `site-packages`
- directory so it can be used as a module. On *Windows only*, `which.py`
- (and the launcher stub `which.exe`) will be installed in the Python
- install dir to (hopefully) put `which` on your PATH.
- On Un*x platforms (including Linux and Mac OS X) there is often a
- `which` executable already on your PATH. To use this `which` instead of
- your system's on those platforms you can manually do one of the
- following:
- - Copy `which.py` to `which` somewhere on your PATH ahead of the system
- `which`. This can be a symlink, as well:
- ln -s /PATH/TO/site-packages/which.py /usr/local/bin/which
- - Python 2.4 users might want to use Python's new '-m' switch and setup
- and alias:
-
- alias which='python -m which'
-
- or stub script like this:
- #!/bin/sh
- python -m which $@
- 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 [here](which.py), 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>...] [<command-name>...]
- 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 <command-name> was given.
- Near misses include duplicates, non-regular files and (on Un*x)
- files without executable access.
- Change Log
- ----------
- ### v1.1.0
- - Change version attributes and semantics. Before: had a _version_
- tuple. After: __version__ is a string, __version_info__ is a tuple.
- ### v1.0.3
- - Move hosting of which.py to trentm.com. Tweaks to associated bits
- (README.txt, etc.)
- ### v1.0.2:
- - Rename mainline handler function from _main() to main(). I can
- conceive of it being called from externally.
- ### v1.0.1:
- - Add an optimization for Windows to allow the optional
- specification of a list of exts to consider when searching the
- path.
- ### v1.0.0:
- - Simpler interface: What was which() is now called whichgen() -- it
- is a generator of matches. The simpler which() and whichall()
- non-generator interfaces were added.
- ### v0.8.1:
- - API change: 0.8.0's API change making "verbose" output the default
- was a mistake -- it breaks backward compatibility for existing
- uses of which in scripts. This makes verbose, once again, optional
- but NOT the default.
- ### v0.8.0:
- - bug fix: "App Paths" lookup had been crippled in 0.7.0. Restore that.
- - feature/module API change: Now print out (and return for the module
- interface) from where a match was found, e.g. "(from PATH element 3)".
- The module interfaces now returns (match, from-where) tuples.
- - bug fix: --path argument was broken (-p shortform was fine)
- ### v0.7.0:
- - bug fix: Handle "App Paths" registered executable that does not
- exist.
- - feature: Allow an alternate PATH to be specified via 'path'
- optional argument to which.which() and via -p|--path command line
- option.
- ### v0.6.1:
- - first public release
|