Replacement for pexpect
Project description
Fast Start
Install the package:
pip install --user processcontroller
Import the main class:
from processcontroller import ProcessController
Create a new instance:
process_controller = ProcessController()
The ProcessController() instance
Methods
The run() method:
process_controller.run(command, options) Run a program (command and options detailed below)
The send() method:
process_controller.send(str|bytes) Send a string or bytearray to the subprogram stdin, you will usually use it inside a callback or in detached state
The close() method:
process_controller.close() Close the stdin of the subprogram so it reaches EOF, you will usually use it inside a callback or in detached state
The kill() method:
process_controller.kill() Sends signal SIGKILL to the subprogram, the return_value should be (pid, 9) after that. (this should not be so used to be honest)
Attributes
return_value
is the return value of the subprogram it will be - (0, 0) if running - (pid, status) if terminated
Function Parameters
ProcessController.run()
command
The command parameter must be an array like:
['/usr/bin/python', 'file.py']
options
Currently, it supports the following keys, ‘when’, ‘input’, ‘echo’ and ‘detached’
when:
This key is used to listen to events occuring on the STDOUT of the subprogram The value have to be an array of events The “event” is in fact a match for some pattern:
'when': [ ['^SomeRegex.*\n', callback], ['^An other one.\n', cb] ['^prompt>\$ $', cb] ]
Be careful about the ending line, the match will be called each time a char is added to the buffer, this helps matching prompts maybe I’ll add an option to avoid such an expansive operation in the future Every time a ‘n’ char is found, the line is treated once and reseted to ‘’
The callbacks will be called with two arguments: the ProcessController instance, and the matched string:
def callback(processcontroller, string)
You can automates user inputs in your callback when required by the subprogram using the send function of your ProcessController instance:
def cb(p, s): c.send('some input')
input:
This key is used to pre-fill the stdin of a subprogram before running it:
pc = ProcessController() pc.run(['/bin/bash'], { 'input': 'echo test && exit' })
You can set an array of input:
'input': ['one', 'two', 'three'] # sends "one\ntwo\nthree\n" You can input str or bytes, conversion is handled for you
echo:
This key is a boolean that defaults to False. When set to True, the ProcessController will print the input sent to your subprogram where it has been asked
detached:
This key is used to make the program run in its own thread, making the call to run non-blocking:
pc = ProcessController() pc.run(['/bin/bash'], { 'detached': True }) pc.send('echo test') # will print test to stdout pc.close() # close stdin of subprogram, so that bash will read EOF
Don’t forget that you have to create a new instance a ProcessController everytime you want to execute a new subprogram
Please feel free to read the tests and code for a better understanding
ENJOY
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
File details
Details for the file processcontroller-0.0.3.tar.gz
.
File metadata
- Download URL: processcontroller-0.0.3.tar.gz
- Upload date:
- Size: 4.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.5.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0dd20b6a27352e44b4ee53a95b1784e23396795fe91b97053de478acaba52bf9 |
|
MD5 | b2ef3a645d72ce2dd59a9768c7cdb920 |
|
BLAKE2b-256 | a46800530b8b5c92ff1c7701490495e63214fdfed3753c969879d8141b8dba45 |
File details
Details for the file processcontroller-0.0.3-py3-none-any.whl
.
File metadata
- Download URL: processcontroller-0.0.3-py3-none-any.whl
- Upload date:
- Size: 5.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/40.5.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 576856a8e89b210b8dbb8937b64ced54755bca7940a915983500288f0f6f8bb4 |
|
MD5 | f615b138ec9fbe52e67a0ce2354eea2f |
|
BLAKE2b-256 | 4ab42ffe3e39bccfbd51f3be3f4266ab2cbf1e0fe7f2d78bff31b8b1d817e812 |