2011-12-07 13 views
13

Molte volte userò l'interprete Python per ispezionare le variabili e passare ai comandi prima di scrivere effettivamente su un file. Comunque alla fine ho circa 30 comandi nell'interprete e devo copiarli/incollarli in un file da eseguire. Esiste un modo per esportare/scrivere la cronologia dell'interprete Python in un file?Esportare la cronologia dell'interprete Python in un file?

Per esempio

>>> a = 5 
>>> b = a + 6 
>>> import sys 
>>> export('history', 'interactions.py') 

E poi posso aprire il file interactions.py e leggere:

a = 5 
b = a + 6 
import sys 
+0

Cosa c'è di sbagliato in copia e incolla? È possibile utilizzare la semplice ricerca/sostituzione per correggere il file >>>. Non sarebbe più semplice? –

+0

Copia/incolla trenta righe di input alcune volte al giorno diventa noiosa ... –

risposta

21

IPython è estremamente utile se ti piace usare sessioni interattive. Ad esempio per il tuo caso, c'è il comando salva, basta inserire save my_useful_session 10-20 per salvare le linee di input da 10 a 20 e 23 a my_useful_session.py. (per aiutare con questo, ogni riga è preceduta dal suo numero)

Guarda i video nella pagina della documentazione per ottenere una rapida panoramica delle funzionalità.

:: :: O

C'è una way per farlo. Memorizzare il file in ~/.pystartup

# Add auto-completion and a stored history file of commands to your Python 
# interactive interpreter. Requires Python 2.0+, readline. Autocomplete is 
# bound to the Esc key by default (you can change it - see readline docs). 
# 
# Store the file in ~/.pystartup, and set an environment variable to point 
# to it: "export PYTHONSTARTUP=/home/user/.pystartup" in bash. 
# 
# Note that PYTHONSTARTUP does *not* expand "~", so you have to put in the 
# full path to your home directory. 

import atexit 
import os 
import readline 
import rlcompleter 

historyPath = os.path.expanduser("~/.pyhistory") 

def save_history(historyPath=historyPath): 
    import readline 
    readline.write_history_file(historyPath) 

if os.path.exists(historyPath): 
    readline.read_history_file(historyPath) 

atexit.register(save_history) 
del os, atexit, readline, rlcompleter, save_history, historyPath 

È inoltre possibile aggiungere questo per ottenere autocomplete gratuitamente:

readline.parse_and_bind('tab: complete') 

Si prega di notare che questo funziona solo su sistemi * nix. Poiché readline è disponibile solo nella piattaforma Unix.

+1

+1 per l'hint ipython – silvado

+1

Usa iPython, è il futuro di Python cli. – Will

5

Quanto segue non è il mio lavoro, ma francamente non mi ricordo dove ho ottenuto Tuttavia ... posiziona il seguente file (su un sistema GNU/Linux) nella tua cartella home (il nome del file deve essere .pystartup.py):

# Add auto-completion and a stored history file of commands to your Python 
# interactive interpreter. Requires Python 2.0+, readline. Autocomplete is 
# bound to the Esc key by default (you can change it - see readline docs). 
# 
# Store the file in ~/.pystartup, and set an environment variable to point 
# to it, e.g. "export PYTHONSTARTUP=/max/home/itamar/.pystartup" in bash. 
# 
# Note that PYTHONSTARTUP does *not* expand "~", so you have to put in the 
# full path to your home directory. 

import atexit 
import os 
import readline 
import rlcompleter 

historyPath = os.path.expanduser("~/.pyhistory") 
historyTmp = os.path.expanduser("~/.pyhisttmp.py") 

endMarkerStr= "# # # histDUMP # # #" 

saveMacro= "import readline; readline.write_history_file('"+historyTmp+"'); \ 
    print '####>>>>>>>>>>'; print ''.join(filter(lambda lineP: \ 
    not lineP.strip().endswith('"+endMarkerStr+"'), \ 
    open('"+historyTmp+"').readlines())[-50:])+'####<<<<<<<<<<'"+endMarkerStr 

readline.parse_and_bind('tab: complete') 
readline.parse_and_bind('\C-w: "'+saveMacro+'"') 

def save_history(historyPath=historyPath, endMarkerStr=endMarkerStr): 
    import readline 
    readline.write_history_file(historyPath) 
    # Now filter out those line containing the saveMacro 
    lines= filter(lambda lineP, endMarkerStr=endMarkerStr: 
         not lineP.strip().endswith(endMarkerStr), open(historyPath).readlines()) 
    open(historyPath, 'w+').write(''.join(lines)) 

if os.path.exists(historyPath): 
    readline.read_history_file(historyPath) 

atexit.register(save_history) 

del os, atexit, readline, rlcompleter, save_history, historyPath 
del historyTmp, endMarkerStr, saveMacro 

Riceverete quindi tutti i gadget forniti con bash shell (frecce su e giù che navigano nella cronologia, ctrl-r per la ricerca inversa, ecc ....).

La cronologia dei comandi completa verrà archiviata in un file situato all'indirizzo: ~/.pyhistory.

Sto usando questo da secoli e non ho mai avuto un problema.

HTH!

11

Se si utilizza Linux/Mac e dispone di libreria readline, si potrebbe aggiungere il seguente in un file ed esportarlo in .bash_profile e vi avere sia il completamento e la storia.

# python startup file 
import readline 
import rlcompleter 
import atexit 
import os 
# tab completion 
readline.parse_and_bind('tab: complete') 
# history file 
histfile = os.path.join(os.environ['HOME'], '.pythonhistory') 
try: 
    readline.read_history_file(histfile) 
except IOError: 
    pass 
atexit.register(readline.write_history_file, histfile) 
del os, histfile, readline, rlcompleter 

comando Export:

export PYTHONSTARTUP=path/to/.pythonstartup 

Consente di salvare il pitone storia della console a ~/.pythonhistory

1

In shell Python:

%history 

Il comando stamperà tutti i comandi che avete inserito nella shell python corrente.

% history -g 

Il comando stamperà tutti i comandi registrati in python shell fino a un numero significativo di righe.

%history -g -f history.log 

Scriverà i comandi registrati insieme al numero di riga. puoi rimuovere i numeri di riga della larghezza fissa per i comandi di interesse usando gvim.

Problemi correlati