Releases: netinvent/command_runner
Heartbeat
This release adds an optional heartbeat
argument that takes a defined number of seconds after which command_runner logs a line.
This allows, by reading logs, to precisely know that a process is still running.:
Also, TimeoutExpired
and StopOnInterrupt
now only log the last 1000 characters of command output.
Something in, something out
This release adds a new parameter to customize stdin.
Features
- New
stdin
parameter to change default behavior of Popen
Leave the queues alone
This release adds a new parameter to allow keeping stdout/stderr queues after command_runner
has finished.
Features
- New
no_close_queues
parameter to leave stdout/stderr queues open for later usage by parent functions - Updated ofunctions.threading implementation to v2.1.0
- Added python 3.12 and pypy 3.10 to test matrix
- poller/monitor tests now have less rounds in pypy python implementation (takes too long on Github actions)
Fixes
- Various minor linter fixes
Let's get your priorities right
This release is a quick fix for priority settings
Features
- Priority settings are now case insensitive
Fixes
- IO priority was set with process priority values instead of IO priority values
- Failing to set process/IO priority because of insufficient permissions now shows a proper warning message in logs
command and conquer them all, nod if you're happy
This release mainly adds process priority settings and a couple of shorthands for other functionality.
Features
- New silent parameter disabling all logger calls except of logging.DEBUG levels
- New on_exit parameter that takes a callback function as argument, convenient when used in a thread
- valid_exit_codes now accept boolean True which means "all" exit codes
- New priority parameter which sets cpu bound process priority to 'low', 'normal' or 'high'
- New io_priority parameter wihhc sets io bound process priority to 'low', 'normal' or 'high'
Fixes
- Fix output capture failure should be an error log instead of debug
- Fix no longer show debug logging for stdout or stderr when empty
command and conquer them all, don't nod
This is a hotfix release for v1.4.0 that mainly targets an encoding issue.
Fixes
command_runner
- Fixes encoding was not honored unless explicitly disabled
- Use standard ping arguments in tests
elevate
- Use
sleep
instead of ping sleep emulation on Linux
Misc
- Update github actions to v3
- Removed python 3.5 and 3.6 from linux test matrix since Github won't provide them anymore
command and conquer them all, with live streams
This is a feature rich release which primary function is to allow background jobs to report live stdout/stderr stream data to your favorite application by using queues or callback functions.
It also fixes a couple of Python 2.7 & PyPy issues.
Features
- command_runner now has a
command_runner_threaded()
function which allows to run in background, but stil provide live stdout/stderr stream output via queues/callbacks - Refactor poller mode to allow multiple stdout / stderr stream redirectors
- Passing a queue.Queue() instance to stdout/stderr arguments will fill queue with live stream output
- Passing a function to stdout/stderr arguments will callback said function with live stream output
- Passing a string to stdout/stderr arguments will redirect stream into filename described by string
- Added
split_stream
argument which will make command_runner return (exit_code, stdout, stderr) instead of (exit_code, output) tuple - Added
check_interval
argument which decides how much time we sleep between two checks, defaults to 0.05 seconds.
Lowering this improves responsiveness, but increases CPU usage. Default value should be more than reasaonable for most applications - Added
stop_on
argument which takes a function, which is called everycheck_interval
and will interrupt execution if it returns True - Added
process_callback
argument which takes a function(process), which is called upon execution with a subprocess.Popen object as argument for optional external process control - Possibility to disable command_runner stream encoding with
encoding=False
so we get raw output (bytes) - Added more unit tests (stop_on, process_callback, stream callback / queues, to_null_redirections, split_streams)
Fixes
- Fix unix command provided as list didn't work with
shell=True
- Fixed more Python 2.7 UnicodedecodeErrors on corner case exceptions catches
- Fixed python 2.7 TimeoutException output can fail with UnicodedecodeError
- Fix Python 2.7 does not have subprocess.DEVNULL
- Ensure output is always None if process didn't return any string on stdout/stderr on Python 2.7
- Fix python 2.7 process.communicate() multiple calls endup without output (non blocking process.poll() needs communicate() when using shell=True)
Misc
- Removed queue usage in monitor mode (needs lesser threads)
- Optimized performance
- Added new exit code -250 when queue/callbacks are used with monitor method or unknown method has been called
- Optimized tests
command & conquer the standard out/err reloaded
This is a maintenance release to address some CI and packaging issues only.
You only need to update if you're experiencing pip install problems under Python 2.7.
command & conquer the standard out/err
Features
This release adds the possibility to disable stdout/stderr capture by adding stdout=False
and/or stderr=False
parameters on top of the existing file and/or pipe parameters.
Misc
Add python 3.10 to the test matrix
command (threads) & conquer
Minor release
This release adresses some race conditions that happen only under some circonstances with pypy 3.7, where the timeout check thread hasn't yet returned but the process monitor already stops because the process to monitor has finished.
In that case, timeouts were enforced, but the exit code was 137 (corresponding to the exit code of a killed process).
Fixes
- Timeout race condition with pypy 3.7 (!) where sometimes exit code wasn't -254
- Try to use signal.SIGTERM (if exists) to kill a process instead of os API that uses PID in order to prevent possible collision when process is already dead and another process with the same PID exists
Misc
- Tests are now more verbose
- Black formatter is now enforced
- Timeout tests are less strict for some platform delays