Repository navigation
0.2.0
Added
- Windows support. qsv is started suspended and placed in its own Job Object before it runs,
so a timeout, cancellation or Ctrl-C stops qsv and everything it started:
CTRL_BREAK_EVENTfirst, thenTerminateJobObjectafterkill_grace. Previously only
qsv.exeitself was killed. Withinherit_env=False,SYSTEMROOTis still passed on
Windows, since many programs fail to start without it. CI runs the full test suite on
Windows. (#4,
#5)
Changed
- The sdist now contains only the package, tests, README, CHANGELOG and LICENSE. 0.1.0's also
included repository tooling files (CLAUDE.md,.serena/,uv.lock,.github/). The wheel
is unchanged. (#2) - Tested on Python 3.14 as well as 3.10–3.13. (#3)
Fixed
- A timeout now raises within a few
kill_graceperiods even when a process qsv started has
left the process group and still holds its output pipes, including when qsv ignores SIGTERM.
Previously the run waited for that process to exit. Output it still holds is dropped, and
AsyncQsvcloses its pipe file descriptors instead of keeping them open until it exits.
(#3) - Cancelling an
AsyncQsvrun now always kills qsv and everything it started, even when the
cancellation arrives during timeout cleanup or comes fromasyncio.run()shutting down. A
cancelled run finishes its teardown before the cancellation propagates.
(#3) - A second Ctrl-C while a sync run is waiting out
kill_graceno longer skips the forced kill,
which left a qsv that ignores the polite stop running. A Ctrl-C right after qsv starts is
handled the same way. (#5) - On Windows with Python 3.10–3.12, a run whose child stops reading a large
stdin=payload
no longer hangs past its timeout. (#5) - A failed run whose stdout is not valid UTF-8 raises the typed
QsvErrorinstead of
UnicodeDecodeError. (#3) count()andheaders()work withstdout_path=andtext=Falseinstead of raising
IndexError. (#3)- A relative
binarypath now works together withcwd=.find_qsvreturns absolute paths.
(#3)
Full Changelog: 0.1.0...0.2.0