"Системе не удается найти указанный файл" при вызове подпроцесса. Открыть в python
Я пытаюсь использовать svnmerge.py для объединения некоторых файлов. Под капотом он использует python, и когда я его использую, я получаю сообщение об ошибке - "Система не может найти указанный файл". Коллеги на работе используют одну и ту же версию svnmerge.py и python (2.5.2, в частности r252:60911) без проблем.
Я нашел эту ссылку, которая описывает мою проблему. Пробуя изложенное, я подтвердил, что Python может найти svn (он у меня на пути):
P: \> питон Python 2.5.2 (r252:60911, 21 февраля 2008 г., 13:11:45) [MSC v.1310 32 бит (Intel)] на win32 Введите "помощь", "авторское право", "кредиты" или "лицензия" для получения дополнительной информации. >>> импорт ОС >>> i,k = os.popen4("svn --version") >>> i.close() >>> k.readline() 'SVN, версия 1.4.2 (r22196)\n'
Однако, глядя на код svnmerge.py, я заметил, что для python версий 2.4 и выше он идет по другому пути выполнения. Вместо того, чтобы вызывать os.popen4(), он использует subprocess.Popen(). Попытка воспроизвести ошибку:
C: \> питон Python 2.5.2 (r252:60911, 21 февраля 2008 г., 13:11:45) [MSC v.1310 32 bit (Intel)] для win32 Введите "помощь", "авторское право", "кредиты" или "лицензия" для получения дополнительной информации. Информация. >>> импорт подпроцесса >>> p = subprocess.Popen("svn --version", stdout=subprocess.PIPE, >>> close_fds=False, stderr=subprocess.PIPE) Traceback (последний вызов был последним): Файл "", строка 1, в Файл "C:\Python25\lib\subprocess.py", строка 594, в __init__ ошибаться, ошибаться) Файл "C:\Python25\lib\subprocess.py", строка 816, в _execute_child STARTUPINFO) WindowsError: [Ошибка 2] Система не может найти указанный файл >>>
На данный момент я закомментировал конкретный код версии 2.4 и выше, но я бы хотел найти правильное решение.
Если это не очевидно, я новичок в Python, но Google не помог. Есть указатели?
1 ответ
Это ошибка, см. Документациюsubprocess.Popen
, Там либо должен быть "shell=True
параметр, или первый аргумент должен быть последовательностью ['svn', '--version']
, Как сейчас, Popen
ищет исполняемый файл с именем, буквально "svn --version", который не находит.
Я не знаю, почему это будет работать для ваших коллег, хотя, если они работают на одной и той же ОС и версии Python... FWIW выдает мне такое же сообщение об ошибке на Mac, и любой из двух способов, которые я дал, исправляет это,