NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2033 most downloaded on PyPI
Process executor (not only) for tests.
Last release today
03 Oct 2026
Ships fairly regularly
a new release about every 5 months
Nearly every release is documented
notes for 39 of 40 stable releases
1 version withdrawn
withdrawn after publishing
12 years old
41 releases · first in 2014
HTTPExecutor no longer drops the query string and the ;params from the url it checks - the whole request target, fragment aside, is now sent. Hence HT
HTTPExecutor no longer drops the query string and the ;params from the url it checks - the whole request target, fragment aside, is now sent. Hence HTTPExecutor.url now holds an urlsplit result rather than a urlparse one. (#1174)
HTTPExecutor.after_start_check had a blocking connection check. Now it uses either new request_timeout constructor or executor's timeout value. (#1175)
SimpleExecutor.__del__ raised AttributeError for an executor whose __init__ failed before the base class ran - as HTTPExecutor does when it rejects its url or its request_timeout. (#1175)
One column per quarter.
Fixed OutputExecutor never detecting a banner that gets split across two reads. The tail of an unterminated line is now carried over, instead of being
Fixed OutputExecutor never detecting a banner that gets split across two reads. The tail of an unterminated line is now carried over, instead of being consumed unmatched. (#1115)
Fixed OutputExecutor timing out on processes that produce a lot of output before the banner. Draining no longer hands back control as soon as the pipe momentarily runs empty, which used to limit it to roughly one pipe buffer per sleep interval. (#1115)
Fixed OutputExecutor disregarding its timeout and spinning on the closed output when the process ends before the banner appears. (#1115)
Add Python 3.15 to the CI
Add completed check_suite to automerge triggers
Extend pre-commit with pyproject-fmt to format pyproject.toml
Fix automerge action configuration
Hardened CI workflows by pinning external workflows/actions to commit hashes instead of mutable version tags.
Migrate dev env and build system to uv
Migrate to trusted publishing.
Nudge stuck dependabot pull requests back into the automerge flow
Read pull request state with GITHUB_TOKEN in the dependabot nudge
Trigger automerge from the workflows that actually exist
Updated actions-reuse for automerge
Ignore macOS psutil environ permission errors when scanning processes, preventing sporadic cleanup failures.
Correctly point the minimum required python version.
Correctly point the minimum required python version.
Not updating it causes installs without pinned mirakuru versions to fail.
Executors now accept additional kwargs that can be passed to popen. (#905 _)
Drop support for Python 3.9
Executors now accept additional kwargs that can be passed to popen. (#905)
Add support for Python 3.14
Prevent OutputExecutor from hanging when a child process produces a large amount of output before the banner. This was resolved by implementing non-blocking reads and fragmented output consumption to avoid pipe backpressure and ensure timely banner detection. (#98)
Downgrade MacOS runner to 14, as the 15 running as macos-latest at the moment is misbehaving.
Tests on PyPy are running fine, while those on regular python vversion constantly fail.
Improve README
Replace black with ruff-format
Speed up tests with pytest-xdist
Update pipelines for fizyk/actions-reuse 4
Standardized license field in pyproject.toml to use SPDX identifier and avoid deprecation warnings from setuptools.
Adjust links after repository transfer
Adjust workflows for actions-reuse 3.0.0
Fix rerunfailures configuration
Run tests against oldest supported dependencies.
Standardized license field in pyproject.toml to use SPDX identifier and avoid deprecation warnings from setuptools.
Tests: pick free port instead of hardcoding to 3000
SimpleExecutor now have an envvars property, that returns defined envvars with added os.envvars and mirakuru_uuid envvar.
SimpleExecutor now have an envvars property, that returns defined envvars with added os.envvars and mirakuru_uuid envvar.
This will allow to re-use same envvars for starting process and any additional process runs in inheriting executors. (#842)
Dropped support for Python 3.8 (As it reached EOL)
Include py.typed to the package published on pypi (#633 _)
Include py.typed to the package published on pypi (#633)
Reformatted code with black 23 (#613 _)
Support Python 3.11 (#617)
Reformatted code with black 23 (#613)
Introduce towncrier as changelog management too. (#615)
Moved Development dependency management to pipfile/pipenv (#616)
Move package definition into the pyproject.toml file (#618)
Use shared automerge flow and github app. (#619)
Use tbump to manage versioning (#628)
Added Python 3.10 to classifiers
Added Python 3.10 to classifiers
Misc ---- - Use strictier mypy checks
Use strictier mypy checks
Replace exp_sig executor parameter with expected_returncode. Parameter description already assumed that, however handing it assumed full POSIX compati
Replace exp_sig executor parameter with expected_returncode. Parameter description already assumed that, however handing it assumed full POSIX compatibility on the process side. Now the POSIX is only assumed if no expected_returncode is passed to the executor, and returncode is simply that, a returncode, nothing more
Compacted Documentation into readme (was pretty small anyway)
Moved CI to Github Actions
Blackified codebase
Compacted Documentation into readme (was pretty small anyway)
[enhancement] Ability to set up expected exit code for executor. In Java exit codes 1- 127 have special meaning, and the regular exit codes are offset
[enhancement] Ability to set up expected exit code for executor. In Java exit codes 1- 127 have special meaning, and the regular exit codes are offset by those of special meaning.
[enhancement] If process is being closed and the shutdown won't be clean (won't return exit code 0) mirakuru will now rise ProcessFinishedWithError ex
[enhancement] If process is being closed and the shutdown won't be clean (won't return exit code 0) mirakuru will now rise ProcessFinishedWithError exception with exit_code
[bugfix][macos] Fixed typing issue on macOS
[bugfix][macos] Fixed typing issue on macOS
[bug] Always close connection for HTTPExecutor after_start_check
[bug] Always close connection for HTTPExecutor after_start_check
[enhancement] Log debug message if execption occured during HTTPExecutor start check
[ehnancement] adjust typing handling in HTTPExecutor
[feature] Drop support for python 3.5. Rely on typing syntax and fstrings that is available since python 3.6 only
[feature] Drop support for python 3.5. Rely on typing syntax and fstrings that is available since python 3.6 only
[ehnancement] For output executor on MacOs fallback to select.select for OutputExecutor. Increases compatibility with MacOS where presence of select.poll depends on the compiler used.
[enhancement] Apply shelx.quote on command parts if command is given as a list Should result in similar results when running such command with or without shell.
Nothing published for this version
[repackage] - mark python 3.5 as required. Should disallow installing on python 2
[repackage] - mark python 3.5 as required. Should disallow installing on python 2
[enhancement] Executor's timeout to be set for both executor's start and stop
[enhancement] Executor's timeout to be set for both executor's start and stop
[enhancement] It's no longer possible to hang indefinitely on the start or stop. Timeout is set to 3600 seconds by default, with values possible between 0 and sys.maxsize with the latter still bit longer than 2924712086 centuries.
[enhancement] Do not fail if processes child throw EPERM error during clean up phase
[enhancement] Do not fail if processes child throw EPERM error during clean up phase
[enhancement] Run subprocesses in shell by default on Windows
[ehnancement] Do not pass preexec_fn on windows
[enhancement] Fallback to kill through SIGTERM on Windows, since SIGKILL is not available
[enhancement] Fallback to kill through SIGTERM on Windows, since SIGKILL is not available
[enhancement] detect cases where during stop process already exited, and simply clean up afterwards
[enhancement] when killing the process ignore OsError with errno no such process as the process have already died.
[enhancement] when killing the process ignore OsError with errno no such process as the process have already died.
[enhancement] small context manager code cleanup
[bugfix] atexit cleanup_subprocesses() function now reimports needed functions
[bugfix] atexit cleanup_subprocesses() function now reimports needed functions
[bugfix] Handle IOErrors from psutil
[bugfix] Handle IOErrors from psutil (#112)
[bugfix] Pass global vars to atexit cleanup_subprocesses function (#111)
[feature] Kill all running mirakuru subprocesses on python exit.
[feature] Kill all running mirakuru subprocesses on python exit.
[enhancement] Prefer psutil library (>=4.0.0) over calling 'ps xe' command to find leaked subprocesses.
[feature] HTTPExecutor enriched with the 'status' argument. It allows to define which HTTP status code(s) signify that a HTTP server is running.
[feature] HTTPExecutor enriched with the 'status' argument. It allows to define which HTTP status code(s) signify that a HTTP server is running.
[feature] Changed executor methods to return itself to allow method chaining.
[feature] Context Manager to return Executor instance, allows creating Executor instance on the fly.
[style] Migrated % string formating to format().
[style] Explicitly numbered replacement fields in string.
[docs] Added documentation for timeouts.
[refactoring] Moved source to src directory.
[refactoring] Moved source to src directory.
[fix, feature] Python 3.5 fixes.
[fix] Docstring changes for updated pep257.
[fix] Modify MANIFEST to prune tests folder.
[fix] Modify MANIFEST to prune tests folder.
[feature] HTTPExecutor will now set the default 80 if not present in a URL.
[feature] Detect subprocesses exiting erroneously while polling the checks and error early.
[fix] Make test_forgotten_stop pass by preventing the shell from optimizing forking out.
[style] Corrected code to conform with W503, D210 and E402 linters errors as reported by pylama 6.3.1.
[style] Corrected code to conform with W503, D210 and E402 linters errors as reported by pylama 6.3.1.
[feature] Introduced a hack that kills all subprocesses of executor process. It requires 'ps xe -ww' command being available in OS otherwise logs error.
[refactoring] Classes name convention change. Executor class got renamed into SimpleExecutor and StartCheckExecutor class got renamed into Executor.
[feature] Ability to set up custom signal for stopping and killing processes managed by executors.
[feature] Ability to set up custom signal for stopping and killing processes managed by executors.
[feature] Replaced explicit parameters with keywords for kwargs handled by basic Executor init method.
[feature] Executor now accepts both list and string as a command.
[fix] Even it's not recommended to import all but from mirakuru import * didn't worked. Now it's fixed.
[tests] increased tests coverage. Even test cover 100% of code it doesn't mean they cover 100% of use cases!
[code quality] Increased Pylint code evaluation.
[feature] Introduced PidExecutor that waits for specified file to be created.
[feature] Introduced PidExecutor that waits for specified file to be created.
[feature] Provided PyPy compatibility.
[fix] Closing all resources explicitly.
[fix] Kill all children processes of Executor started with shell=True.
[fix] Kill all children processes of Executor started with shell=True.
[feature] Executors are now context managers - to start executors for given context.
[feature] Executor.stopped - context manager for stopping executors for given context.
[feature] HTTPExecutor and TCPExecutor before .start() check whether port is already used by other processes and raise AlreadyRunning if detects it.
[refactoring] Moved python version conditional imports into compat.py module.
[fix] Fixed an issue where setting shell to True would execute only part of the command.
[fix] Fixed an issue where setting shell to True would execute only part of the command.
[fix] Fixed an issue where OutputExecutor would hang, if started process stopped producing output.
[fix] Fixed an issue where OutputExecutor would hang, if started process stopped producing output.
[fix] Removed leftover sleep from TCPExecutor._wait_for_connection.
[fix] Removed leftover sleep from TCPExecutor._wait_for_connection.
- [fix] Fixed MANIFEST.in. - Updated packaging options.
[fix] Fixed MANIFEST.in.
Updated packaging options.
Exposed process attribute on Executor.
Exposed process attribute on Executor.
Exposed port and host on TCPExecutor.
Exposed URL on HTTPExecutor.
Simplified package structure.
Simplified executors operating API.
Updated documentation.
Added docblocks for every function.
Applied license headers.
Stripped orchestrators.
Forked off from summon_process.
Your coding agent can read these notes before it upgrades. Set up the MCP server →