Estou com um problema ao tentar usar uv run
com os.exec
variantes do Python. Algum conselho sobre como fazer isso funcionar?
Bash, Ubuntu WSL, uv run python
, execlp
, uv 0.6.5
:
$ uv run python
Python 3.12.9 (main, Feb 12 2025, 14:50:50) [Clang 19.1.6 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.execlp("uv", "run", "python")
Manage Python versions and installations
Usage: run python [OPTIONS] <COMMAND>
(rest of the help text here)
Powershell, Windows 11, uv run main.py
, execv
, uv 0.6.10 (f2a2d982b 2025-03-25)
:
PS > uv run python
Python 3.12.9 (main, Mar 17 2025, 21:06:20) [MSC v.1943 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.execv(r"C:\Users\username\.local\bin\uv.exe", ["run", "main.py"])
PS > error: unrecognized subcommand 'main.py'
Usage: run [OPTIONS] <COMMAND>
Nada sobre isso é específico para uv, ou mesmo para Python: todas as chamadas da família exec (incluindo no nível C) permitem que um
argv[0]
seja passado descrevendo ao programa que é invocado o nome com o qual ele foi iniciado, permitindo que os programas tenham comportamentos distintos dependendo do nome com o qual são iniciados.A assinatura documentada para execlp parece com
os.execlp(file, arg0, arg1, ...)
-- quearg0
é o nome com o qual o executável é chamado, diferente dofile
usado para invocá-lo. Similarmente,os.execv(path, args)
assume queargs
começará com umargv[0]
que descreve o nome com o qual o executável foi chamado, diferente do nome do arquivo que foi resolvido.Em ambos os exemplos dados aqui, você está deixando de fora
argv[0]
. Corrigido, suas chamadas ficariam mais parecidas com:ou