`py -V:X.Y script.py` fails with "No suitable Python runtime found" when script arguments contain forward slashes
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 72/100
Línea de trabajo
Comienza en PC/launcher2.c, en parseCommandLine(), y luego reproduce el problema con los comandos py -V:3.14 indicados y test_simple.py en Windows. Se considera terminado cuando los argumentos de script que contienen barras ya no producen “No suitable Python runtime found” al usar un indicador de versión, y el análisis existente de company/tag sigue funcionando.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
When using the Python Launcher (py.exe) with a version flag (-V:X.Y), any script argument containing a forward slash (e.g. ./output, /tmp, C:/foo) causes exit code 103 ("No suitable Python runtime found"), even though the specified Python version is installed.
Reproduction
# test_simple.py
import sys
print('ran ok, argv:', sys.argv[1:])
py -V:3.14 test_simple.py files # OK
py -V:3.14 test_simple.py ./files # FAIL: "No suitable Python runtime found"
py -V:3.14 test_simple.py --help # OK (no slash)
py -V:3.14 test_simple.py .\files # OK (backslash is fine)
py -V:3.14 test_simple.py /files # FAIL
py -V:3.14 test_simple.py C:/files # FAIL
py test_simple.py ./files # OK (no -V: flag = unaffected)
Root cause
In PC/launcher2.c, parseCommandLine() parses -V:company/tag as follows:
const wchar_t *argStart = wcschr(arg, L':') + 1; // points past ':' in "-V:3.14"
const wchar_t *tagStart = wcschr(argStart, L'/'); // BUG: scans entire remaining cmdline
arg points into the full command-line string (from GetCommandLineW), not just the current token. tail (the whitespace-bounded end of the -V: token) is computed earlier but is not used to bound the wcschr search.
For py -V:3.14 script.py ./files, argStart is "3.14 script.py ./files...". The unbounded wcschr finds the / in ./files, and misparses:
company = "3.14 script.py ." (should be empty)
tag = "files" (should be "3.14")
selectEnvironment then finds no Python matching this bogus company/tag and returns RC_NO_PYTHON.
Fix
Limit the / search to within tail:
const wchar_t *argStart = wcschr(arg, L':') + 1;
// Search for '/' only within the current token boundary
const wchar_t *tagStart = NULL;
for (const wchar_t *p = argStart; p < tail; ++p) {
if (*p == L'/') { tagStart = p; break; }
}
Environment
- Python 3.14.4 (Windows 11, version 25H2)
py.exeversion: 3.14.4 (C:\Windows\py.EXE)- Also present in
launcher2.conmainand3.13branches (same code)
- Lenguaje dominante
- Python
- Estrellas
- 77.2k
- Forks
- 36k
- Merge medio
- 1 d 9 h
- PR fusionados (30 d)
- 558
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de python/cpython
-
docs pending
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
stdlib type-feature
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
stdlib type-feature
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
build type-bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
-
stdlib topic-email type-feature
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Todos los issues de python/cpython
Issues similares
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
zostera/django-bootstrap4#894 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
use-agent-os/agent-os#3276 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
zephyrproject-rtos/zephyr#119726 ·
-
area/auth bug comp/agent P3 platform/discord type/security
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
NousResearch/hermes-agent#117848 ·