@classmethod
def find_py(cls):
py_exe = None
- if sysconfig.is_python_build(True):
+ if sysconfig.is_python_build():
py_exe = Path(sys.executable).parent / PY_EXE
else:
for p in os.getenv("PATH").split(";"):
)
return py_exe
- def run_py(self, args, env=None, allow_fail=False, expect_returncode=0):
+ def run_py(self, args, env=None, allow_fail=False, expect_returncode=0, argv=None):
if not self.py_exe:
self.py_exe = self.find_py()
"PYLAUNCHER_DEBUG": "1",
"PYLAUNCHER_DRYRUN": "1",
}
+ if not argv:
+ argv = [self.py_exe, *args]
with subprocess.Popen(
- [self.py_exe, *args],
+ argv,
env=env,
+ executable=self.py_exe,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
self.assertEqual("3.100-arm64", data["SearchInfo.tag"])
self.assertEqual(f"X.Y-arm64.exe -X fake_arg_for_test -prearg {script} -postarg", data["stdout"].strip())
+ def test_py_shebang_short_argv0(self):
+ with self.py_ini(TEST_PY_COMMANDS):
+ with self.script("#! /usr/bin/env python -prearg") as script:
+ # Override argv to only pass "py.exe" as the command
+ data = self.run_py([script, "-postarg"], argv=f'"py.exe" "{script}" -postarg')
+ self.assertEqual("PythonTestSuite", data["SearchInfo.company"])
+ self.assertEqual("3.100", data["SearchInfo.tag"])
+ self.assertEqual(f'X.Y.exe -prearg "{script}" -postarg', data["stdout"].strip())
+
def test_install(self):
data = self.run_py(["-V:3.10"], env={"PYLAUNCHER_ALWAYS_INSTALL": "1"}, expect_returncode=111)
cmd = data["stdout"].strip()