Intereting Posts
Tortoisesvn не распознает измененные файлы после обновления SVN – Управление частичным слиянием ревизии git clone exiting без запроса имени пользователя / пароля Создание нового репозитория из рабочей копии перед фиксацией файлов ошибка MSB6006: «svnversion.exe» вышел с кодом 1 Не отображает все удаленные ветви с веткой git -r TFS – Типы конкретных фильтров из сведений о наборе параметров Использование SVN самостоятельно или в небольших рабочих группах – подход рабочего процесса? Использование svn с проектом, приводящим к ошибке Как восстановить каталог после многократного пересмотра? git сбросить все фиксации в разн. двух ветвей путь к браузеру для svn Использование Conan (и SVN) в качестве менеджера зависимости для проектов Matlab Восстановить файлы в git, которые были удалены при удалении ветки Перемещать отслеживаемые файлы, не отслеживаемые git

Ошибка Python при использовании os.popen ()

Ну, у меня есть скрипт python, работающий на Mac OS X. Теперь мне нужно изменить его, чтобы поддерживать обновление рабочей копии SVN в указанное время. Однако после обучения я обнаружил, что команды SVN поддерживают обновление рабочей копии в указанной версии.

Поэтому я пишу функцию для извлечения информации из команды: svn log XXX, чтобы найти соответствующую версию до указанного времени. Вот мое решение:

process=os.popen('svn log XXX') print process.readline() print process.readline() process.close() 

Чтобы сделать проблему простой, я просто печатаю первые 2 строки на выходе. Тем не менее, когда я выполнял скрипт, я получил сообщение об ошибке: svn: Ошибка записи: Broken pipe

Я думаю, что причина, по которой я получил сообщение, состоит в том, что команда svn продолжала выполняться, когда я закрывал Popen. Поэтому появляется сообщение об ошибке.

Есть ли кто-нибудь, кто может помочь мне решить проблему? Или дайте мне альтернативное решение для достижения цели. Спасибо!

Solutions Collecting From Web of "Ошибка Python при использовании os.popen ()"

Я получаю эту ошибку, когда я использую svn log | head svn log | head тоже не специфична для Python. Попробуйте что-нибудь вроде:

 from subprocess import PIPE, Popen process = Popen('svn log XXX', stdout=PIPE, stderr=PIPE) print process.stdout.readline() print process.stdout.readline() 

для подавления stderr . Вы также можете просто использовать

 stdout, stderr = Popen('svn log XXX | head -n2', stdout=PIPE, stderr=PIPE, shell=True).communicate() print stdout 

Пожалуйста, используйте pysvn. Он довольно прост в использовании. Или используйте подпроцесс.

Произошла ли ошибка, если вы наконец:

 print process.read() 

И лучше вызвать wait (), если вы используете os.popen или subprocess.