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.4, 3.5, 3.6, 3.7
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file EasyProcess-0.2.7.tar.gz.
File metadata
- Download URL: EasyProcess-0.2.7.tar.gz
- Upload date:
- Size: 12.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/2.7.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f757cd16cdab5b87117b4ee6cf197f99bfa109253364c7bd717ad0bcd39218a0
|
|
| MD5 |
2e24425df68b9c6ca723b0a3dcdfce5a
|
|
| BLAKE2b-256 |
7e346d985708b1503f101ceaf132c6a789474e01318f711e99c8c40183ef92c4
|
File details
Details for the file EasyProcess-0.2.7-py2.py3-none-any.whl.
File metadata
- Download URL: EasyProcess-0.2.7-py2.py3-none-any.whl
- Upload date:
- Size: 12.1 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/2.7.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1871651a3c9f192090c6f523f48bc73ba6ec651530a8c4cd7e2776a4c54d795
|
|
| MD5 |
2a9697e8854c9cd5cb7783985387a28b
|
|
| BLAKE2b-256 |
fa2940040d1d64a224a5e44df9572794a66494618ffe5c77199214aeceedb8a7
|