2011-12-07 18 views
13

Birçok kez ben değişkenleri inceleyin ve komutları gezinmek için Python yorumlayıcısı kullanır. Ancak sonunda tercümanda yaklaşık 30 komutum var ve bunları çalıştırmak için bir dosyaya kopyalayıp yapıştırmam gerekiyor. Python yorumlayıcı geçmişini bir dosyaya aktarabilirim/yazabileceğim bir yol var mı?Python yorumlayıcı geçmişini bir dosyaya aktarma? Aslında bir dosyaya yazmadan önce

örnek

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

için

Sonra interactions.py dosyayı açın ve okuyabilir:

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

Kopyalama ve yapıştırmada sorun nedir? '>>>' şeklinde düzeltmek için basit bul/değiştir komutunu kullanabilirsiniz. Bu en basit olmaz mıydı? –

+0

Günde otuz satırlık girdi yapıştırarak günde birkaç kez sıkıcılaşır ... –

cevap

21

IPython adresinden piton konsol geçmişini kurtaracak eğer interaktif oturumlar kullanmak gibi son derece yararlıdır. Örneğin, sizin usecase için kaydetme komutu var, sadece 10 - 20 ve 23 giriş hatlarını my_useful_session.py dosyasına kaydetmek için my_useful_session 10-20 23'ü kaydedin. (bununla ilgili yardım için, her satırın numarasına göre öntanımlıdır)

Özelliklere hızlı bir genel bakış için belge sayfasındaki videolara bakın.

:: YA ::

bunu yapmak için bir way yoktur. Bedava ~/.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 

Ayrıca ekleyebilir Bunu alacak otomatik tamamlamada dosyayı saklayın:

readline.parse_and_bind('tab: complete') 

bu sadece * Nix sistemleri üzerinde çalışacak unutmayın. Readline sadece Unix platformunda mevcut olduğundan.piton kabuğu olarak

+1

+1 ipython için ipucu ipucu – silvado

+1

iPython'u kullanın, bu Python cli'nun geleceği. – Will

5

aşağıdaki benim eserim değil, ama ben ilk nereden açıkçası ben hatırlamıyorum Ancak ... Ancak, aşağıdaki dosyayı (bir GNU/Linux sisteminde) ana klasörünüze yerleştirin (dosyanın adı .pystartup.py olmalıdır):

# 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 

Daha sonra bash kabuğuyla birlikte gelen tüm güzelliklere sahip olacaksınız (tarihte gezinen yukarı ve aşağı oklar, ters arama için ctrl-r vb.). ~/.pyhistory:

Eksiksiz komut geçmişi bulunan bir dosyada saklanır.

Bunu yaştan beri kullanıyorum ve hiçbir zaman bir sorunum olmadı.

HTH! Linux/Mac kullanıyorsanız ve taleb kütüphane var ise

11

görmelisiniz, bir dosyaya aşağıdakileri ekleyin ve .bash_profile bunu dışa ve yapacaksın olabilir hem tamamlama hem de tarih var.

# 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 

İhracat komut:

export PYTHONSTARTUP=path/to/.pythonstartup 

Bu ~/.pythonhistory

1

: komutu Geçerli piton kabuğunda girmiş tüm komutları yazdırır

%history 

.

% history -g 

komut satırları bazı önemli sayıda kadar piton kabuğunda açmış tüm komutları yazdırır.

%history -g -f history.log 

hat numarasıyla birlikte kaydedilir komutları yazacak. gvim kullanarak ilgilenilen komutlar için sabit genişlikli çizgi sayılarını kaldırabilirsiniz.