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.

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top