Running Python from subprocess cross platforms
November 04, 2023
Edit on GithubIn one of my Python package offering a CLI, I added the ability to run it as python -m mypackage
. Natuarally, I wanted to write a small test to make sure it worked, which used the subprocess
module to run python with the -m
flag. Simple enough, right?
result = subprocess.run(["python", "-m", ...], ...)
Well, when I pushed to CI, I realised that the python
executable couldn’t be found on Windows… It’s probably called python.exe
or somthing like that. Do I need to introduce a condition in my test depending on the platform? Surely, there must be a better way.
After a quick search, I found about sys.executable
, which does exactly that. Neat!
Here is how my test looks like now:
import subprocess
import sys
def test_can_run_as_python_module():
result = subprocess.run(
[
sys.executable,
"-m",
"mypackage",
"--help"
],
check=True,
capture_output=True,
)
assert result.returncode == 0
assert b"my-package [OPTIONS]" in result.stdout
Hope that helps!