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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
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()
'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()
'12\n'
>>> ((ls["-a"] | grep["-v", "py"]) > "/tmp/foo.txt")()
''
>>> ((cat < "/tmp/foo.txt") | wc["-l"])()
'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
'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 https://plumbum.readthedocs.io for full details
"""
from __future__ import annotations
# Avoids a circular import error later
import plumbum.path # noqa: F401
from plumbum.commands import (
BG,
ERROUT,
FG,
NOHUP,
RETCODE,
TEE,
TF,
CommandNotFound,
ProcessExecutionError,
ProcessLineTimedOut,
ProcessTimedOut,
)
from plumbum.machines import BaseRemoteMachine, PuttyMachine, SshMachine, local
from plumbum.path import LocalPath, Path, RemotePath
from plumbum.version import version
__author__ = "Tomer Filiba (tomerfiliba@gmail.com)"
__version__ = version
__all__ = (
"BG",
"ERROUT",
"FG",
"NOHUP",
"RETCODE",
"TEE",
"TF",
"CommandNotFound",
"ProcessExecutionError",
"ProcessLineTimedOut",
"ProcessTimedOut",
"BaseRemoteMachine",
"PuttyMachine",
"SshMachine",
"local",
"LocalPath",
"Path",
"RemotePath",
"__author__",
"__version__",
"cmd",
)
from . import cmd
def __dir__():
"Support nice tab completion"
return __all__
|