Mam skrypt Pythona działający na Mac OS X. Teraz muszę go zmodyfikować, aby wspierać aktualizację mojej kopii roboczej SVN w określonym czasie. Jednak po nauce odkryłem, że polecenia SVN obsługują tylko aktualizację kopii roboczej do określonej wersji.
Piszę więc funkcję, aby wykraść informacje z polecenia: svn log XXX, aby znaleźć odpowiednią wersję do określonego czasu. Oto moje rozwiązanie:
process=os.popen("svn log XXX")
print process.readline()
print process.readline()
process.close()
Aby problem był prosty, po prostu wypisuję pierwsze 2 linie na wyjściu. Jednak podczas wykonywania skryptu dostałem komunikat o błędzie: svn: Błąd zapisu: Przerwany przewód
Myślę, że powodem, dla którego dostałem wiadomość, jest to, że komenda svn nadal działała, gdy zamykałem Popena. Pojawia się więc komunikat o błędzie.
Czy jest ktoś, kto może mi pomóc rozwiązać ten problem? Lub daj mi alternatywne rozwiązanie, aby osiągnąć cel. Dzięki!
Odpowiedzi:
1 dla odpowiedzi № 1Dostaję ten błąd, gdy używam svn log | head
też nie jest specyficzna dla Pythona. Spróbuj czegoś takiego:
from subprocess import PIPE, Popen
process = Popen("svn log XXX", stdout=PIPE, stderr=PIPE)
print process.stdout.readline()
print process.stdout.readline()
stłumić stderr
. Możesz także po prostu użyć
stdout, stderr = Popen("svn log XXX | head -n2", stdout=PIPE, stderr=PIPE, shell=True).communicate()
print stdout
1 dla odpowiedzi nr 2
Użyj pysvn. Jest bardzo łatwy w użyciu. Lub użyj podprocesu.
Czy błąd nadal występuje, jeśli w końcu:
print process.read()
I lepiej jest wywołać wait (), jeśli używasz os.popen lub subprocess.