2008-08-30 10 views
5

Ich versuche, svnmerge.py zu verwenden, um einige Dateien zusammenzuführen. Unter der Haube verwendet es Python, und wenn ich es benutze, erhalte ich einen Fehler - "Das System kann die angegebene Datei nicht finden". Kollegen bei der Arbeit führen die gleiche Version von svnmerge.py und von Python (2.5.2, speziell r252: 60911) ohne ein Problem."Das System kann die angegebene Datei nicht finden" beim Aufrufen von Subprozess.Popen in Python

Ich fand this link, die mein Problem beschreibt. Der Versuch, was dort skizziert wurde, bestätigte ich Python könnte SVN (es ist in meinem Weg) finden:

 
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' 

Mit Blick auf dem svnmerge.py Code, bemerkte ich jedoch für Python-Versionen 2.4 und höher wurde im Anschluss an eine andere Ausführung Pfad. Anstatt os.popen4() aufzurufen, verwendet es subprocess.Popen(). Der Versuch, dass der Fehler reproduziert:

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

Vorerst habe ich die 2,4-und höheren spezifischen Code kommentiert, aber ich möchte eine angemessene Lösung zu finden.

Wenn es nicht offensichtlich ist, bin ich ein kompletter Python-Neuling, aber Google hat nicht geholfen. Irgendwelche Zeiger?

Antwort

13

Es ist ein Fehler, siehe documentation of subprocess.Popen. Es muss entweder eine "shell=True Option sein, oder das erste Argument muss eine Sequenz ['svn', '--version'] sein. Wie es jetzt ist, sucht Popen nach einer ausführbaren Datei mit dem Namen "svn --version", die es nicht findet.

Ich weiß nicht, warum es für Ihre Kollegen obwohl arbeiten würde, wenn sie das gleiche Betriebssystem und die gleiche Version von Python laufen ... FWIW es gibt mir die gleiche Fehlermeldung auf einem Mac, und eine der beiden Möglichkeiten, die ich gab es behoben.