2012-08-06 14 views
9

Czy istnieje sposób na włączenie możliwości rejestrowania w programie IPython zarówno w przypadku danych wyjściowych, jak i danych wejściowych?Wyjście protokołu IPython?

To co plik dziennika wygląda obecnie:

#!/usr/bin/env python 
# 2012-08-06.py 
# IPython automatic logging file 
# 12:02 
# ================================= 
print "test" 

Chciałbym mieć jeszcze jeden wiersz pokazać się:

#!/usr/bin/env python 
# 2012-08-06.py 
# IPython automatic logging file 
# 12:02 
# ================================= 
print "test" 
# test 

(# jest, bo zakładamy, że jest potrzebna aby zapobiec złamaniu funkcji IPython'a logplay)

Przypuszczam, że jest to możliwe przy użyciu notebooków IPython, ale na co najmniej jednej maszynie potrzebuję tego, jestem limitem ed do ipython 0.10.2.

EDYCJA: Chciałbym wiedzieć, jak skonfigurować to automatycznie, tj. W pliku konfiguracyjnym. Teraz mój config wygląda

from time import strftime 
import os 
logfilename = strftime('ipython_log_%Y-%m-%d')+".py" 
logfilepath = "%s/%s" % (os.getcwd(),logfilename) 

file_handle = open(logfilepath,'a') 
file_handle.write('########################################################\n') 
out_str = '# Started Logging At: '+ strftime('%Y-%m-%d %H:%M:%S\n') 
file_handle.write(out_str) 
file_handle.write('########################################################\n') 
file_handle.close() 

c.TerminalInteractiveShell.logappend = logfilepath 
c.TerminalInteractiveShell.logstart = True 

ale określając c.TerminalInteractiveShell.log_output = True wydaje się mieć żadnego wpływu

Odpowiedz

8

Istnieje opcja -o dla %logstart:

-o: log also IPython's output. In this mode, all commands which 
    generate an Out[NN] prompt are recorded to the logfile, right after 
    their corresponding input line. The output lines are always 
    prepended with a '#[Out]# ' marker, so that the log remains valid 
    Python code. 

Uzupełnienie: Jeśli jesteś w sesji interaktywnej ipython dla które logowanie zostało już rozpoczęte, musisz najpierw zatrzymać rejestrowanie, a następnie ponownie uruchomić:

In [1]: %logstop 

In [2]: %logstart -o 
Activating auto-logging. Current session state plus future input saved. 
Filename  : ./ipython.py 
Mode   : backup 
Output logging : True 
Raw input log : False 
Timestamping : False 
State   : active 

Należy zauważyć, że po ponownym uruchomieniu "Rejestrowanie wyjściowe" ma teraz wartość "Prawda".

+1

Rozwiązanie wydaje się to robić w skrypcie uruchamiania, jak opisano tutaj: http://wiki.ipython.org/Cookbook/DatedLog (to było rozwiązanie dostarczone w http://stackoverflow.com/questions/11836612/gdzie-jak-w-jakim-kontekście-jest-ipythons-plik-konfiguracji-wykonano? lq = 1) – keflavich