„Das System kann die angegebene Datei nicht finden“ beim Aufruf von subprocess.Popen in Python
Frage
Ich versuche, svnmerge.py zu verwenden, um einige Dateien zusammenzuführen.Unter der Haube wird Python verwendet, und wenn ich es verwende, erhalte ich die Fehlermeldung „Das System kann die angegebene Datei nicht finden“.Kollegen bei der Arbeit verwenden dieselbe Version von svnmerge.py und von Python (2.5.2, insbesondere r252:60911) ohne Probleme.
ich fand dieser Link, was mein Problem beschreibt.Als ich versuchte, was dort beschrieben wurde, bestätigte ich, dass Python svn finden konnte (es liegt in meinem Pfad):
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'
Als ich mir jedoch den svnmerge.py-Code ansah, fiel mir auf, dass er bei Python-Versionen 2.4 und höher einem anderen Ausführungspfad folgte.Anstatt os.popen4 () aufzurufen, verwendet es subprocess.popen ().Der Versuch reproduziert den Fehler:
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 >>>
Im Moment habe ich den spezifischen Code für Version 2.4 und höher auskommentiert, würde aber gerne eine geeignete Lösung finden.
Falls es nicht offensichtlich ist: Ich bin ein absoluter Python-Neuling, aber Google hat nicht geholfen.Irgendwelche Hinweise?
Lösung
Es ist ein Fehler, siehe Dokumentation von subprocess.Popen
.Es muss entweder eine vorhanden sein "shell=True
"-Option, oder das erste Argument muss eine Sequenz sein ['svn', '--version']
.Wie es jetzt ist, Popen
sucht nach einer ausführbaren Datei namens „svn --version“, die es nicht findet.
Ich weiß jedoch nicht, warum es bei Ihren Kollegen funktionieren würde, wenn sie dasselbe Betriebssystem und dieselbe Python-Version verwenden ...FWIW, es gibt mir auf einem Mac die gleiche Fehlermeldung, und eine der beiden Möglichkeiten, die ich angegeben habe, behebt das Problem.