2014-03-03 90 views
2

我想知道如何配置Ipython,以便它將最後一個命令的運行時間以毫秒/秒添加到正確的命令提示符處。這可以在ZSH/Bash shell中完成,如此處所示https://coderwall.com/p/kmchbwIpython自定義提示以顯示單元格運行時間

我該如何去做這件事?

+0

谷歌「ipython自定義提示」? – hivert

+0

@hivert,我試過了,我在github中打開了一個問題。問題在於單元的時間不是靜態的,但文檔中給出的例子都是靜態的。 – zsljulius

+0

另外,你可以很容易地寫一個裝飾函數... –

回答

1

這是一個代碼段次,每次發言,並打印出來就在接近下一個提示調整,也使得通過名稱「texc」訪問的價值。

# Assumes from __future__ import print_function 
from time import time 
import blessings # Not a necessary requirement 
class ExecTimer(object): 
    def __init__(self, ip): 
     self.shell = ip 
     self.t_pre = time() 
     self.texc = 0 
     self.prev_texc = 0 
     self.term = blessings.Terminal() 

    def pre_execute(self): 
     self.t_pre = time() 

    def post_execute(self): 
     self.prev_texc = self.texc 
     self.texc = round(time() - self.t_pre, 4) 
     print(self.term.bold_blue(
      '{} s'.format(self.texc).rjust(self.term.width - 1) 
     )) 
     # Only add or update user namespace var if it is safe to do so 
     if 'texc' not in self.shell.user_ns or \ 
       self.shell.user_ns['texc'] == self.prev_texc: 
      self.shell.push({'texc': self.texc}) 
     else: 
      pass 

    def register(self): 
     self.shell.events.register('pre_execute', self.pre_execute) 
     self.shell.events.register('post_execute', self.post_execute) 

ExecTimer(get_ipython()).register() 

要打印在它上面的在提示符代替,取出打印,並且在ipython_config.py組:

c.PromptManager.in_template = '{texc} s\nIn[\\#]: ' 

或在同一個文件(startup.py)使用

get_ipython().run_line_magic(
    'config', 
    r"PromptManager.in_template = '{texc} s\nIn[\\#]: '" 
) 
相關問題