1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
r"""
Plumbum Shell Combinators
-------------------------
A wrist-handy library for writing shell-like scripts in Python, that can serve
as a ``Popen`` replacement, and much more::
>>> from plumbum.cmd import ls, grep, wc, cat
>>> ls()
u'build.py\ndist\ndocs\nLICENSE\nplumbum\nREADME.rst\nsetup.py\ntests\ntodo.txt\n'
>>> chain = ls["-a"] | grep["-v", "py"] | wc["-l"]
>>> print chain
/bin/ls -a | /bin/grep -v py | /usr/bin/wc -l
>>> chain()
u'12\n'
>>> ((ls["-a"] | grep["-v", "py"]) > "/tmp/foo.txt")()
u''
>>> ((cat < "/tmp/foo.txt") | wc["-l"])()
u'12\n'
>>> from plumbum import local, FG, BG
>>> with local.cwd("/tmp"):
... (ls | wc["-l"]) & FG
...
13 # printed directly to the interpreter's stdout
>>> (ls | wc["-l"]) & BG
<Future ['/usr/bin/wc', '-l'] (running)>
>>> f=_
>>> f.stdout # will wait for the process to terminate
u'9\n'
Plumbum includes local/remote path abstraction, working directory and environment
manipulation, process execution, remote process execution over SSH, tunneling,
SCP-based upload/download, and a {arg|opt}parse replacement for the easy creation
of command-line interface (CLI) programs.
See http://plumbum.readthedocs.org for full details
"""
from plumbum.commands import ProcessExecutionError, CommandNotFound, ProcessTimedOut
from plumbum.commands import FG, BG, ERROUT
from plumbum.path import Path, LocalPath, RemotePath
from plumbum.machines import local, BaseRemoteMachine, SshMachine, PuttyMachine
from plumbum.version import version
__author__ = "Tomer Filiba (tomerfiliba@gmail.com)"
__version__ = version
#===================================================================================================
# Module hack: ``from plumbum.cmd import ls``
#===================================================================================================
import sys
from types import ModuleType
class LocalModule(ModuleType):
"""The module-hack that allows us to use ``from plumbum.cmd import some_program``"""
__all__ = () # to make help() happy
__package__ = __name__
__getattr__ = local.__getitem__
__path__ = []
__file__ = __file__
cmd = LocalModule(__name__ + ".cmd", LocalModule.__doc__)
sys.modules[cmd.__name__] = cmd
del sys
del ModuleType
del LocalModule
|