"Le système ne trouve pas le fichier spécifié" lors de l'appel de subprocess.Popen en python

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

  •  09-06-2019
  •  | 
  •  

Question

J'essaie d'utiliser svnmerge.py pour fusionner certains fichiers.Sous le capot, il utilise Python et lorsque je l'utilise, j'obtiens une erreur : "Le système ne trouve pas le fichier spécifié".Les collègues de travail exécutent la même version de svnmerge.py et de python (2.5.2, en particulier r252:60911) sans problème.

j'ai trouvé ce lien, qui décrit mon problème.En essayant ce qui y était décrit, j'ai confirmé que Python pouvait trouver svn (c'est sur mon chemin) :

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' 

En regardant le code svnmerge.py, cependant, j'ai remarqué que pour les versions 2.4 et supérieures de Python, il suivait un chemin d'exécution différent.Plutôt que d'invoquer OS.popen4 (), il utilise Sub-Process.popen ().Essayer cela reproduit l'erreur:

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

Pour l'instant, j'ai commenté le code spécifique aux versions 2.4 et supérieures, mais j'aimerais trouver une solution appropriée.

Si ce n'est pas évident, je suis un débutant complet en Python, mais Google n'a pas aidé.Des conseils ?

Était-ce utile?

La solution

C'est un bug, voir le documentation de subprocess.Popen.Il faut soit qu'il y ait un "shell=True" option, ou le premier argument doit être une séquence ['svn', '--version'].Comme c'est le cas maintenant, Popen recherche un exécutable nommé littéralement "svn --version" qu'il ne trouve pas.

Je ne sais pas pourquoi cela fonctionnerait pour vos collègues, s'ils utilisent le même système d'exploitation et la même version de Python...FWIW, cela me donne le même message d'erreur sur un Mac, et l'une ou l'autre des deux méthodes que j'ai proposées le corrige.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top