2013-02-01 42 views
3

有沒有一種方法,使IPython的控制檯自動重新複製代碼,例如,從IPython的控制檯,複製代碼自動格式化標準Python提示

In [131]: a = [1, 2, 3] 

In [132]: a 
Out[132]: [1, 2, 3] 

與非標準Python的提示,即

>>> a = [1, 2, 3] 
>>> a 
[1, 2, 3] 

的動機是:

  1. 行號(也許多餘的換行符)也沒有意義。
  2. 標準格式可隨doctest使用。

有趣的是,IPython中的Qt的控制檯同時提供「複製」和「複製(原始文本)」,和「複製」的結果在下面的默認行爲:

a = [1, 2, 3] 

a 
Out[132]: [1, 2, 3] 

顯然,一些自動重新格式化是可以實現的。有沒有辦法自定義這個功能?

我知道PromptManager它可以用來定製顯示的提示(例如,http://nb.nathanamy.org/2012/09/terminal-productivity/)。但是,IPython提示(帶數字)在交互式會話中很有用。我只希望複製的版本被重新格式化。

+0

在您輸入代碼之前,您可以打開'%doctest_mode',這會給您提供'>>>'提示,直到您再次關閉它爲止。我認爲這是我們目前最接近的事情。 –

+0

謝謝你提到這個!如果知道代碼將被預先複製,'%doctest_mode'確實很有用。奇怪的是,它似乎沒有與qtconsole ... – herrlich10

+0

這並不完全令人驚訝 - 在Qt控制檯中,提示由前端生成,而'%doctest_mode'在內核中運行。您可以考慮添加「使用Python提示覆制」菜單選項。 –

回答

0

我不知道任何內置的方式來做到這一點,但也許你可以通過定義自己的%魔術功能來幫助自己。

喜歡的東西

玉碎the docs如何定義和註冊自定義的魔法,然後嘗試類似:

from IPython.core.magic import (register_line_magic, register_cell_magic, 
          register_line_cell_magic) 

@register_line_magic 
def export_prompt(start, end): 
    "Exporting input and output within given limits" 
    for i in range(start, end): 
     in_ = In.get(i) 
     out_ = Out.get(i) 
     print in_ 
     print out_ 

# We delete this to avoid name conflicts for automagic to work 
del export_prompt 

我會嘗試這個自己,讓我們來看看它是否工作。

編輯 好像它不馬上工作,你必須弄清楚如何訪問InOut定製的魔法裏面。但是我會留下供參考的答案,也許其他人可以完成樣品。

+0

謝謝你指出這個方向!我會檢查文檔。 – herrlich10

1

您可以設置iPython配置並檢查ipython section of this article

步驟如下:

1.創建簡檔

$ ipython profile create 

2.Modify以下行〜/的.config/IPython的/ profile_default/ipython_config.py

c.PromptManager.in_template = '>>> '

之後,iPython將按照您的預期工作。

+0

感謝您的回答,Cody〜但正如問題所述,我希望在交互式ipython控制檯中保留編號提示(這是提供信息的),但只有在內容被複制時纔會自動用python默認提示替換它(so當我將代碼粘貼到stackoverflow中時,它顯示「>>>」而不是「In [235]:」:) – herrlich10