2008-08-30 21 views
5

Estoy tratando de usar svnmerge.py para combinar algunos archivos. Bajo el capó usa python, y cuando lo uso me sale un error: "El sistema no puede encontrar el archivo especificado". Los colegas en el trabajo ejecutan la misma versión de svnmerge.py, y de python (2.5.2, específicamente r252: 60911) sin problemas."El sistema no puede encontrar el archivo especificado" al invocar subproceso.Popen en python

Encontré this link, que describe mi problema. Tratando lo que se describe allí, me confirmaron Python pudo encontrar SVN (lo llevo en la ruta):

 
P:\>python 
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import os 
>>> i,k = os.popen4("svn --version") 
>>> i.close() 
>>> k.readline() 
'svn, version 1.4.2 (r22196)\n' 

Si examina el código svnmerge.py, sin embargo, me di cuenta para las versiones 2.4 y superiores pitón fue a raíz de una ejecución diferente camino. En lugar de invocar os.popen4() usa subprocess.Popen(). Tratando que reproduce el error:

 
C:\>python 
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. 
>>> import subprocess 
>>> p = subprocess.Popen("svn --version", stdout=subprocess.PIPE, 
>>> close_fds=False, stderr=subprocess.PIPE) 
Traceback (most recent call last): 
    File "", line 1, in 
    File "C:\Python25\lib\subprocess.py", line 594, in __init__ 
    errread, errwrite) 
    File "C:\Python25\lib\subprocess.py", line 816, in _execute_child 
    startupinfo) 
WindowsError: [Error 2] The system cannot find the file specified 
>>> 

Por ahora, he comentado a cabo el-y-2,4 superior código específico, pero me gustaría encontrar una solución adecuada.

Si no es obvio, soy un principiante completo de Python, pero Google no me ha ayudado. ¿Alguna sugerencia?

Respuesta

13

Es un error, consulte el documentation of subprocess.Popen. Tiene que haber una opción "shell=True ", o el primer argumento debe ser una secuencia ['svn', '--version']. Como está ahora, Popen está buscando un ejecutable llamado, literalmente," svn --version "que no encuentra.

No sé por qué funcionaría para sus colegas, si están ejecutando el mismo sistema operativo y la misma versión de Python ... FWIW me da el mismo mensaje de error en un Mac, y cualquiera de las dos formas en que dio soluciones.

Cuestiones relacionadas