Não há função de spawnl no Python 2.6?
-
21-09-2019 - |
Pergunta
Acabei de notar que meus códigos antigos escritos no Python 2.5 não funcionam agora. Estou no Python 2.6 btw.
>>> os.spawnl(os.P_NOWAIT,"setup.exe")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\python26\lib\os.py", line 612, in spawnl
return spawnv(mode, file, args)
OSError: [Errno 22] Invalid argument
>>>
Qualquer pista? Ou você tem qualquer amostra de trabalho de OS.spawn* com a opção Nowait.
Atualizar:
Até eu coloquei o caminho completo em os.spawnl (), seu erro ainda.
Solução
Thrope está certo sobre subprocess
sendo preferido. Mas o material da Spawn* ainda está lá em 2.6. De fato, você pode ver isso em sua mensagem de erro. Seu primeiro arg parece ser válido. Eu verificaria o segundo arg, que é o caminho.
Outras dicas
Eu consegui funcionar adicionando o parâmetro fictom finalmente, um pouco descolado
Isto não está a funcionar
os.spawnl(os.P_NOWAIT,"Setup.exe")
Isso também não está funcionando
os.spawnl(os.P_NOWAIT,"Setup.exe","")
Mas isso está funcionando
os.spawnl(os.P_NOWAIT,"Setup.exe","DUMMY")
Obrigado a todos.
Eu acho que é recomendado usar o subprocesso módulo hoje em dia, em vez do os.spawn*
funções. (Não consigo reproduzir seu problema, mas não estou no Windows).
Uma pesquisa no Google traz à tona esta página Sobre o mesmo problema que está acontecendo quando há um espaço no caminho de instalação do Python. Eu não conseguia reproduzir aqui, mas talvez seja o problema?
Em qualquer caso, De acordo com a documentação da MS Esse valor de erro (eInval) deve ser retornado apenas se o argumento do modo for inválido, o que não é o caso aqui.
os.spawnl()
requer caminho completo para executável, enquanto os.spawnlp()
usa a variável de ambiente do caminho para encontrá -la.
Atualizar: Também é um erro comum usar barras de barriga não desconto no caminho literal (tente imprimi -lo para ver se é interpretado corretamente).