2009-12-06 10 views
5

Odpowiedzi w numerze this question nie dotarły do ​​sedna problemu. W programie Python opartym na interfejsie CLI chcę, aby użytkownik mógł edytować plik, a następnie powrócić do programu. Zanim wrócimy, chcę, aby mogli anulować swoje zmiany. Powinno to wyglądać jak funkcja edycji commit-note w Subversion.Inteligentne uruchamianie domyślnego edytora z poziomu programu Python CLI?

Jakie są obecnie najlepsze praktyki dla tego typu zadań?

+0

Chcesz, aby użytkownicy edytowali wtyczkę (lub cały program!) W locie, a następnie niech odrzucają swoje zmiany lub "zatwierdzają" je, ponownie ładując nowy program w tym samym czasie. Czy tego rodzaju próbujesz osiągnąć? – badp

Odpowiedz

2

Subversion, i inni używają zmiennej środowiskowej $ EDITOR, aby określić program do edycji plików tekstowych. Oczywiście $ EDITOR działa tylko wtedy, gdy znajdujesz się na platformie unixowej w powłoce. Będziesz musiał zrobić coś innego dla Windows (cmd /c start tempfile.txt) lub Mac OS X (open tempfile.txt).

Ale w gruncie rzeczy to właśnie odpowiedziały odpowiedzi i powiązane odpowiedzi na inne pytanie.

Jeśli chcesz po prostu "anulować" edycje, zrób tymczasową kopię pliku i wywołaj na nim swojego redaktora. Twój program może następnie skopiować zawartość pliku tymczasowego do rzeczywistego pliku lub, jeśli użytkownik anuluje, nie. Zasadniczo to robi Subversion.

10

Możesz spróbować przeglądać źródła do Mercurial, który jest napisany w Pythonie.

Używają one os.environ do odczytania wartości zmiennych środowiskowych HGEDITOR, VISUAL i EDITOR, domyślnie do vi. Następnie używają os.system, aby uruchomić edytor w pliku tymczasowym utworzonym za pomocą tempfile.mkstemp. Kiedy edytor zostanie ukończony, odczytuje plik. Jeśli ma jakąkolwiek prawdziwą zawartość, operacja jest kontynuowana, w przeciwnym razie zostanie przerwana.

Jeśli chcesz zobaczyć, jak Mercurial to robi, szczegóły są w ui.py i util.py.

Powiązane problemy