/ / Błąd Pythona podczas używania os.popen () - python, macos, svn, popen

Błąd Pythona podczas używania os.popen () - python, macos, svn, popen

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 № 1

Dostaję ten błąd, gdy używam svn log | headteż 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.