"O sistema não pode encontrar o arquivo especificado" ao invocar subprocess.Popen em python

votos
5

Eu estou tentando usar svnmerge.py para mesclar alguns arquivos. Sob o capô ele usa python, e quando eu usá-lo eu recebo um erro - O sistema não pode encontrar o arquivo especificado. Colegas de trabalho estão executando a mesma versão do svnmerge.py, e de python (2.5.2, R252 especificamente: 60911) sem um problema.

Eu encontrei este link , que descreve o meu problema. Tentando o que foi delineado lá, eu confirmou Python poderia encontrar svn (está no meu caminho):

P: \> python 
Python 2.5.2 (R252: 60911, 21 de fevereiro de 2008, 13:11:45) [MSC v.1310 32 bits (Intel)] em Win32 
Type help, copyright, créditos ou licença para mais informações. 
>>> import os 
>>> i, k = os.popen4 ( SVN --version) 
>>> i.close () 
>>> k.readline () 
'Svn, versão 1.4.2 (r22196) \ n' 

Olhando para o código svnmerge.py, embora, notei para versões Python 2.4 e superior que estava seguindo um caminho de execução diferente. Em vez de invocar os.popen4 () ele usa subprocess.popen (). Tentando que reproduz o erro:

C: \> python
Python 2.5.2 (R252: 60911, 21 de fevereiro de 2008, 13:11:45) [MSC v.1310 32 bits (Intel)] em Tipo win32 help, copyright, créditos ou licença para mais em formação.
>>> subprocess importação
>>> p = subprocess.popen ( SVN --version, stdout = subprocess.PIPE, 
>>> close_fds = False, stderr = subprocess.PIPE)
Traceback (chamada mais recente passada):
  File , linha 1, em 
  Arquivo C: \ Python25 \ lib \ subprocess.py, linha 594, em __init__
    errread, errwrite)
  Arquivo C: \ Python25 \ lib \ subprocess.py, linha 816, em _execute_child
    STARTUPINFO)
WindowsError: [Erro 2] O sistema não pode encontrar o arquivo especificado
>>>

Por agora, eu comentou o e-2.4-maior código específico, mas eu gostaria de encontrar uma solução adequada.

Se não é óbvio, eu sou um novato python completa, mas o Google não tem ajudado. Os ponteiros?

Publicado 30/08/2008 em 21:24
fonte usuário
Em outras línguas...                            


1 respostas

votos
13

É um erro, consulte a documentação dasubprocess.Popen . Há tanto precisa ser uma "shell=True"opção, ou o primeiro argumento deve ser uma seqüência ['svn', '--version']. Como é agora, Popenestá à procura de um executável chamado, literalmente, 'svn --version' que não encontra.

Eu não sei por que ele iria trabalhar para os seus colegas, porém, se eles estão executando o mesmo sistema operacional e versão do Python ... FWIW ele me dá a mesma mensagem de erro em um Mac, e qualquer uma das duas maneiras que eu dei a fixa .

Respondeu 30/08/2008 em 21:34
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more