"Системе не удается найти указанный файл" при вызове подпроцесса. Открыть в 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, и любой из двух способов, которые я дал, исправляет это,

Другие вопросы по тегам