txsh is a dynamic wrapper around Twisted ProcessProtocol and spawnProcess that allows you to call any program as if it were a function and return a deferred with its exit code and output. If you wanna know what it does, check out my first release post.
Version 0.2 introduces a few new features and bug fixes.
– Support to subcommands. It looks nice to be able to do “git.branch(“-v”)” instead of “git(“branch”, “-v”)”
– Redirection of stderr and stdout to any file-like object, deferred, deffered queue or callable. If a string is passed, we will assume it’s a filename we can open and write to it.
– Added a few unit tests.
– Fixed a bug where the subcommand was not being properly passed on .bake call.
from txsh import ls, curl, wc, git, sudo # arguments should go separated d = ls("-l", "-h") # ls -l -h # Keyword arguments are also supported d = ls(help=True) # ls --help # Underscores will be replaced by dashes d = curl(connect_timeout=10, url="http://something") # curl --connect-timeout 10 --url http:/something # You can pipe d = wc(ls()) # You can have subcommands d = git.branch() # Same as git("branch") d = sudo.ls("-h") # Same as sudo("ls", "-h") # You can bake ll = ls.bake("-l", "-h") d = ll() # Now ll will always output ls -l -h # You can redirect stderr or stdout to a file using special args _out and _err d = ls("-l", _out=open('output.log', 'wb')) # In fact, you can use any file-like object like a StringIO. # A callabble. def alert(error): pass # Do something d = ls("-l", _err=alert) # Will redirect stderr to alert function. # If you pass a string, we will simply assume it's a filename. d = ls("-l", _out="output.log", _err="error.log") # You can also pass a DeferredQueue or a simple Deferred. queue = DeferredQueue() my_defer = Deferred() d = ls("-l", _out=queue, _err=my_defer) # When stdout is ready, it will call queue.put # When stderr is ready, it will call my_defer.callback