Е, имам 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.