2013-06-27 39 views
7

Mục tiêu của tôi là để gọi ipython, trong khi cũng đăng nhập tất cả các đầu vào/đầu ra để IPython, và thấy cái gì đó như:Làm thế nào tôi có thể đăng nhập đầu ra của IPython mà không có 7 dòng đăng nhập-thông tin xấu xí trên mỗi tải?

[email protected] ~ $ ipython 

In [1]: exit 
[email protected] ~ $ 

Các biểu ngữ có thể dễ dàng gỡ bỏ nếu tôi đặt

c.TerminalIPythonApp.display_banner = False

trong của tôi ~/.ipython/profile-default/ipython_config.py tệp.

Nhưng làm cách nào để có được sự khởi động sạch này trong khi cũng ghi lại nội dung?

Trên một tươi cài đặt, nếu tôi bắt đầu IPython không có tham số tôi thấy:

[email protected] ~ $ ipython 
Python 2.7.3 (default, Jun 20 2013, 12:50:58) 
Type "copyright", "credits" or "license" for more information. 

IPython 0.13.2 -- An enhanced Interactive Python. 
?   -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help  -> Python's own help system. 
object? -> Details about 'object', use 'object??' for extra details. 

In [1]: exit 
[email protected] ~ $ 

Nếu tôi vượt qua một đối số logfile=logfile.txt khi gọi IPython tôi thấy:

[email protected] ~ $ ipython --logfile=logfile.txt 
Activating auto-logging. Current session state plus future input saved. 
Filename  : logfile.txt 
Mode   : backup 
Output logging : False 
Raw input log : False 
Timestamping : False 
State   : active 
Python 2.7.3 (default, Jun 20 2013, 12:50:58) 
Type "copyright", "credits" or "license" for more information. 

IPython 0.13.2 -- An enhanced Interactive Python. 
?   -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help  -> Python's own help system. 
object? -> Details about 'object', use 'object??' for extra details. 

In [1]: exit 
[email protected] ~ $ 

Làm thế nào tôi có thể sử dụng ghi nhật ký mà không thêm sự lộn xộn thêm vào thiết bị đầu cuối của tôi:

Activating auto-logging. Current session state plus future input saved. 
Filename  : logfile.txt 
Mode   : backup 
Output logging : False 
Raw input log : False 
Timestamping : False 
State   : active 

Trên máy khác tôi có IPython cấu hình để tự động đăng nhập mọi thứ bằng việc có một .ipython/profile_default/startup/01-log-everything.py có chứa dòng:

from time import strftime 
import os.path 

ip = get_ipython() 

ldir = ip.profile_dir.log_dir 
fname = strftime('%Y-%m-%d-%H-%M-%S') + ".py" 
filename = os.path.join(ldir, fname) 

ip.run_line_magic('logstart', '-o %s append' % filename) 

mà kết quả trong sự lộn xộn giống như khi tôi thêm --logfile=logfile.txt

Bất kỳ giúp đỡ về cách làm việc đúng cách điều này sẽ được đánh giá cao. Tôi có thể nếu không có gì khác chuyển hướng sys.stdout, cấu hình đăng nhập và sau đó đặt lại sys.stdout nhưng tôi hy vọng có một giải pháp ít hackish.

+0

Một câu hỏi tương tự đã được hỏi ở đây: http: // stackoverflow.com/questions/947810 – BugoK

+0

@BugoK, cảm ơn - câu hỏi trong bài đăng đó hơi tương tự như tôi đoán, nhưng những gì tôi đang cố gắng làm là rất cụ thể và không được đề cập trong bài đăng đó hoặc bất cứ nơi nào khác, tốt nhất tôi có thể nói. –

Trả lời

4

Sau khi xem xét các nguồn IPython, cụ thể là:

Có vẻ như cách duy nhất để thực sự đạt được những gì tôi muốn - hoàn chỉnh khai thác gỗ không có bất cứ điều gì echo'd khi khởi động - là để chuyển hướng hoặc tắt tiếng sys.stdout trong khi khởi tạo nhật ký.

tôi đã tạo ra một tập tin khởi động: ~/.ipython/profile_default/startup/01-log-everything.py mà thực hiện điều này, mã này là:

from time import strftime 
import os.path 
import contextlib 
import cStringIO 
import sys 


# create a context which we can use for any block which we can use for any 
# block which we do not want to print stdout 
# -- taken from http://stackoverflow.com/a/2829036/217652 

@contextlib.contextmanager 
def nostdout(): 
    save_stdout = sys.stdout 
    sys.stdout = cStringIO.StringIO() 
    yield 
    sys.stdout = save_stdout 



ip = get_ipython() 

ldir = ip.profile_dir.log_dir 
fname = strftime('%Y-%m-%d-%H-%M-%S') + ".py" 
filename = os.path.join(ldir, fname) 


# stdout is now muted 
with nostdout(): 
    ip.run_line_magic('logstart', '-o %s append' % filename) 
4

Để đăng nhập, không sử dụng biểu ngữ cờ --no-banner.

ipython --no-banner --logfile='logfile.txt' 

Điều này có thể được tìm thấy trong tệp trợ giúp được hiển thị với cờ --help-all.

ipython --help-all 
+0

Cảm ơn phản hồi, nhưng tôi muốn ngăn chặn biểu ngữ * cũng như * tất cả thông tin đăng nhập. Khi bạn vượt qua '--logfile = 'logfile.txt'', IPython in nửa tá các thứ mà tôi muốn chặn. –