Skip to content

Releases: netinvent/command_runner

Heartbeat

15 Sep 19:31
Compare
Choose a tag to compare

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

09 Jan 19:48
Compare
Choose a tag to compare

This release adds a new parameter to customize stdin.

Features

  • New stdin parameter to change default behavior of Popen

Leave the queues alone

28 Dec 18:15
Compare
Choose a tag to compare

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

11 Dec 14:28
Compare
Choose a tag to compare

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

26 Jan 11:42
c824488
Compare
Choose a tag to compare

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

10 Jan 11:20
3a094ec
Compare
Choose a tag to compare

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

30 May 11:58
Compare
Choose a tag to compare

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 every check_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

16 Apr 14:15
Compare
Choose a tag to compare

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

14 Oct 13:35
Compare
Choose a tag to compare

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

09 Sep 16:45
Compare
Choose a tag to compare

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