"Il sistema non riesce a trovare il file specificato" quando si richiama subprocess.Popen in Python

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

  •  09-06-2019
  •  | 
  •  

Domanda

Sto cercando di utilizzare svnmerge.py per unire alcuni file.Sotto il cofano usa Python e quando lo uso ricevo un errore: "Il sistema non riesce a trovare il file specificato".I colleghi al lavoro eseguono la stessa versione di svnmerge.py e di python (2.5.2, in particolare r252:60911) senza problemi.

ho trovato questo link, che descrive il mio problema.Provando ciò che è stato delineato lì, ho confermato che Python potrebbe trovare svn (è nel mio percorso):

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' 

Osservando il codice svnmerge.py, tuttavia, ho notato che per le versioni Python 2.4 e successive seguiva un percorso di esecuzione diverso.Invece di invocare OS.Popen4 () utilizza subprocess.popen ().Provando a riprodurre l'errore:

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

Per ora, ho commentato il codice specifico 2.4 e versioni successive, ma mi piacerebbe trovare una soluzione adeguata.

Se non è ovvio, sono un principiante assoluto di Python, ma Google non mi ha aiutato.Qualche indicazione?

È stato utile?

Soluzione

È un bug, vedi documentazione di subprocess.Popen.È necessario che ci sia a "shell=True" oppure il primo argomento deve essere una sequenza ['svn', '--version'].Così com'è adesso, Popen sta cercando un eseguibile chiamato, letteralmente, "svn --version" che non trova.

Non so perché funzionerebbe per i tuoi colleghi, se utilizzano lo stesso sistema operativo e la stessa versione di Python...FWIW mi dà lo stesso messaggio di errore su un Mac e uno dei due modi che ho fornito lo risolve.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top