"Il sistema non riesce a trovare il file specificato" quando si richiama subprocess.Popen in Python
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?
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.