«Система не может найти указанный файл» при вызове подпроцесса. Открыть в 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 есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
7
0
10 950
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это ошибка, см. документация subprocess.Popen. Либо должна быть опция "shell=True », либо первым аргументом должна быть последовательность ['svn', '--version']. В настоящее время Popen ищет исполняемый файл с именем, буквально« svn --version », который он не находит.

Я не знаю, почему это сработает для ваших коллег, если они используют ту же ОС и версию Python ... FWIW он дает мне такое же сообщение об ошибке на Mac, и любой из двух способов, которые я дал, исправляет это .

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