"Systemet finner ikke den angitte filen" når påkalle subprocess.Popen i python

stemmer
5

Jeg prøver å bruke svnmerge.py å fusjonere noen filer. Under panseret bruker den python, og når jeg bruker det jeg får en feilmelding - Systemet finner ikke den angitte filen. Kolleger på jobben kjører samme versjon av svnmerge.py, og python (2.5.2, r252 spesifikt: 60911) uten et problem.

Jeg fant denne linken , som beskriver mitt problem. Prøver det som ble skissert der, bekreftet jeg Python kunne finne svn (det er i min sti):

P: \> python 
Python 2.5.2 (r252: 60911, 21 februar 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] på win32 
Type hjelp, copyright, kreditt eller lisens for mer informasjon. 
>>> import os 
>>> i, k = os.popen4 ( svn --version) 
>>> i.close () 
>>> k.readline () 
'Svn, versjon 1.4.2 (r22196) \ n' 

Ser på svnmerge.py kode, men jeg la merke til python versjoner 2.4 og høyere det var etter en annen utførelse bane. Snarere enn å påkalle os.popen4 () den bruker subprocess.Popen (). Prøver som gjengir feilen:

C: \> python
Python 2.5.2 (r252: 60911, 21 februar 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] på win32 Type hjelp, copyright, kreditt eller lisens for mer informasjon.
>>> import delprosess
>>> p = subprocess.Popen ( svn version, stdout = subprocess.PIPE, 
>>> close_fds = False, stderr = subprocess.PIPE)
Tilbakesporings (siste samtale sist):
  Fil , linje 1, 
  Fil C: \ Python25 \ lib \ subprocess.py, linje 594, i __init__
    errread, errwrite)
  Fil C: \ Python25 \ lib \ subprocess.py, linje 816, i _execute_child
    startupinfo)
WindowsError: [Error 2] Systemet finner ikke den angitte filen
>>>

For nå har jeg kommentert ut den 2,4-og-høyere spesifikk kode, men jeg ønsker å finne en riktig løsning.

Hvis det ikke er opplagt, jeg er en komplett python nybegynner, men google har ikke hjulpet. Noen tips?

Publisert på 30/08/2008 klokken 20:24
kilden bruker
På andre språk...                            


1 svar

stemmer
13

Det er en bug, se dokumentasjon påsubprocess.Popen . Det må enten være et "shell=True"alternativet, eller det første argumentet må være en sekvens ['svn', '--version']. Slik det er nå, Popener på utkikk etter en kjørbar navngitt, bokstavelig talt, 'svn --version', som det ikke finner.

Jeg vet ikke hvorfor det ville fungere for dine kolleger om, hvis de kjører samme operativsystem og versjon av Python ... FWIW det gir meg den samme feilmeldingen på en mac, og en av de to måtene jeg ga fikser det .

Svarte 30/08/2008 kl. 20:34
kilden bruker

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