/ / Python грешка при използване на os.popen () - python, macos, svn, popen

Python грешка при използване на os.popen () - python, macos, svn, 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: Запиши грешка: Счупена тръба

Мисля, че причината, поради която получих съобщението, е, че командата svn продължава да изпълнява, когато затварям Попен. Така възниква съобщението за грешка.

Има ли някой, който може да ми помогне да прокарам проблема? Или дайте ми алтернативно решение, за да постигнете целта. Мерси!

Отговори:

1 за отговор № 1

Получавам тази грешка, когато използвам 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

1 за отговор № 2

Моля, използвайте pysvn. Това е доста лесна за използване. Или използвайте подпроцес.

Грешката все още се случва, ако го направите най-накрая:

print process.read()

И е по-добре да извикате wait (), ако използвате os.popen или subprocess.