2009-12-06 1 views
5

Le risposte in this question non hanno raggiunto il cuore del problema. In un programma Python basato su CLI, voglio che l'utente sia in grado di modificare un file e quindi tornare al programma. Prima di tornare, voglio che siano in grado di cancellare le loro modifiche. Questo dovrebbe apparire come la funzione di modifica delle note di commit in Subversion.Avvio intelligente dell'editor predefinito all'interno di un programma CLI Python?

Quali sono le migliori pratiche attuali per questo tipo di attività?

+0

Si desidera consentire agli utenti di modificare un plug-in (o l'intero programma!) Al volo, quindi lasciarli scartare le proprie modifiche o "commit", ricaricando il nuovo programma allo stesso tempo. Questo è ciò che stai cercando di ottenere? – badp

risposta

2

Subversion, et al usa la variabile d'ambiente $ EDITOR per determinare quale programma utilizzare per modificare i file di testo. Naturalmente, $ EDITOR funzionerà solo se ci si trova su una piattaforma unixy in una shell. Dovrai fare qualcosa di diverso per Windows (cmd /c start tempfile.txt) o Mac OS X (open tempfile.txt).

Tuttavia, questo è essenzialmente ciò che hanno risposto le risposte e le risposte correlate all'altra domanda.

Se si desidera essere in grado di "annullare" le modifiche, quindi creare una copia temporanea del file e richiamare il proprio editor. Il tuo programma può quindi copiare il contenuto del file temporaneo nel file reale o, se l'utente annulla, no. Questo è fondamentalmente come fa Subversion.

10

Si potrebbe provare a guardare attraverso i sorgenti di Mercurial, che è scritto in Python.

Essi usano os.environ per leggere il valore delle variabili d'ambiente HGEDITOR, VISUAL e EDITOR, inadempiente a VI. Quindi usano os.system per avviare l'editor su un file temporaneo creato con tempfile.mkstemp. Quando l'editor ha finito, legge il file. Se contiene del contenuto reale, l'operazione continua, altrimenti viene interrotta.

Se si desidera vedere come fa Mercurial, i dettagli sono in ui.py e util.py.