„Das System kann die angegebene Datei nicht finden“ beim Aufruf von subprocess.Popen in Python

StackOverflow https://stackoverflow.com/questions/36324

  •  09-06-2019
  •  | 
  •  

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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top