Easy to use python subprocess interface.
Project description
EasyProcess is an easy to use python subprocess interface.
- Links:
documentation: http://EasyProcess.readthedocs.org
- Features:
layer on top of subprocess module
easy to start, stop programs
easy to get standard output/error, return code of programs
command can be list (preferred) or string (command string is converted to list using shlex.split)
logging
timeout
unit-tests
cross-platform, development on linux
shell is not supported
pipes are not supported
stdout/stderr is set only after the subprocess has finished
stop() does not kill whole subprocess tree
unicode support
supported python versions: 2.7, 3.5, 3.6, 3.7, 3.8
Method chaining
- Similar projects:
execute (http://pypi.python.org/pypi/execute)
commandwrapper (http://pypi.python.org/pypi/commandwrapper)
extcmd (http://pypi.python.org/pypi/extcmd)
plumbum (https://github.com/tomerfiliba/plumbum)
Basic usage
>>> from easyprocess import EasyProcess >>> EasyProcess('python --version').call().stderr u'Python 2.6.6'
Installation
install:
pip install EasyProcess
uninstall:
pip uninstall EasyProcess
Usage
Simple example
Example program:
#-- include('examples/hello.py')--# from easyprocess import EasyProcess import sys s = EasyProcess([sys.executable, '-c', 'print "hello"']).call().stdout print(s) #-#
Output:
#-- sh('python -m easyprocess.examples.hello')--# hello #-#
General
The command can be a string list or a concatenated string:
#-- include('examples/cmd.py')--# from easyprocess import EasyProcess print('-- Run program, wait for it to complete, get stdout (command is string):') s=EasyProcess('python -c "print 3"').call().stdout print(s) print('-- Run program, wait for it to complete, get stdout (command is list):') s=EasyProcess(['python','-c','print 3']).call().stdout print(s) print('-- Run program, wait for it to complete, get stderr:') s=EasyProcess('python --version').call().stderr print(s) print('-- Run program, wait for it to complete, get return code:') s=EasyProcess('python --version').call().return_code print(s) print('-- Run program, wait 1 second, stop it, get stdout:') s=EasyProcess('ping localhost').start().sleep(1).stop().stdout print(s) #-#
Output:
#-- sh('python -m easyprocess.examples.cmd')--# -- Run program, wait for it to complete, get stdout (command is string): 3 -- Run program, wait for it to complete, get stdout (command is list): 3 -- Run program, wait for it to complete, get stderr: Python 2.7.6 -- Run program, wait for it to complete, get return code: 0 -- Run program, wait 1 second, stop it, get stdout: PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.017 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.034 ms #-#
Shell commands
Shell commands are not supported.
return_code
EasyProcess.return_code is None until EasyProcess.stop or EasyProcess.wait is called.
With
By using with statement the process is started and stopped automatically:
from easyprocess import EasyProcess with EasyProcess('ping 127.0.0.1') as proc: # start() # communicate with proc pass # stopped
Equivalent with:
from easyprocess import EasyProcess proc = EasyProcess('ping 127.0.0.1').start() try: # communicate with proc pass finally: proc.stop()
Timeout
This was implemented with “daemon thread”.
“The entire Python program exits when only daemon threads are left.” http://docs.python.org/library/threading.html:
#-- include('examples/timeout.py')--# from easyprocess import EasyProcess s = EasyProcess('ping localhost').call(timeout=2).stdout print(s) #-#
Output:
#-- sh('python -m easyprocess.examples.timeout')--# PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.018 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.037 ms 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.025 ms #-#
Replacing existing functions
Replacing os.system:
retcode = os.system("ls -l") ==> p = EasyProcess("ls -l").call() retcode = p.return_code print(p.stdout)
Replacing subprocess.call:
retcode = subprocess.call(["ls", "-l"]) ==> p = EasyProcess(["ls", "-l"]).call() retcode = p.return_code print(p.stdout)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for EasyProcess-0.2.10-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0f62037295e5bdbaf73b28415e712965b738c67999fd2c53aaa984db5dea40e0 |
|
MD5 | 3e2667c6d2bd2751bf102967d6c0ed0d |
|
BLAKE2b-256 | 328f88d636f1da22a3c573259e44cfefb46a117d3f9432e2c98b1ab4a21372ad |