& # 8220; Система не может найти указанный файл & # 8221; при вызове подпроцесса. Открыть в python
Вопрос
Я пытаюсь использовать svnmerge.py для объединения некоторых файлов. Под капотом он использует python, и когда я его использую, я получаю сообщение об ошибке - "Система не может найти указанный файл". Коллеги на работе используют одну и ту же версию svnmerge.py и python (2.5.2, в частности r252: 60911) без проблем.
Я нашел эту ссылку , которая описывает моя проблема. Пробуя изложенное, я подтвердил, что Python может найти svn (он у меня на пути):
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'
Однако, глядя на код svnmerge.py, я заметил, что для python версий 2.4 и выше он идет по другому пути выполнения. Вместо того, чтобы ссылаться os.popen4 () он использует subprocess.Popen (). Попытка воспроизвести ошибку:
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 >>>
Пока что я закомментировал конкретный код версии 2.4 и выше, но я бы хотел найти правильное решение.
Если это не очевидно, я новичок в Python, но Google не помог. Есть указатели?
Решение
Я не знаю, почему это сработало бы для ваших коллег, хотя, если они работают под управлением одной и той же ОС и версии Python ... FWIW выдает мне то же сообщение об ошибке на Mac, и любой из двух способов, которыми я дал исправления.