2016-07-09 74 views
2

我正在編程一個python用戶界面來控制實驗室中的各種儀器。如果腳本不是交互式運行,那麼與腳本的連接會在腳本結尾處丟失,這可能非常糟糕。我想幫助用戶'記住'以交互方式運行腳本。IPython運行魔術:如何爲「run -i」創建別名?

我在想兩種可能的方法來做到這一點。首先,在標題中指定的,我都可以成爲run -i一個別名:

%alias_magic lab_run run -i 

但這返回一個錯誤:

UsageError: unrecognized arguments: -i 

有沒有辦法來解決這個問題?

或者,我可以在腳本內部檢測到-i標誌是否被傳遞,如果不是,則會引發en錯誤。

In [1]: import sys 
In [2]: run -i test.py random args 
['test.py', 'random', 'args'] 

我不能使用IPY文件,因爲我需要閱讀%運行的標誌,如我剛纔的問題這裏解釋:但是,它並沒有在sys.argv列表中顯示出來 How to add a custom flag to IPython's magic commands? (.ipy files)

任何人都可以看到這個問題的解決方案?

+0

'-i'由'%run'解析,而不是因爲它傳遞給羣衆演員你的腳本爲'sys.argv'。 – hpaulj

+0

看起來'%alias_magic'不帶參數,只有2個字符串。 – hpaulj

回答

3

您可以定義自己的神奇功能,它使用%run -i

from IPython.core.magic import register_line_magic 

@register_line_magic 
def r(line): 
    get_ipython().magic('run -i ' + line) 

del r 

編輯

由於hpaulj指出magic已被棄用。這裏與新 run_line_magic版本:

from IPython.core.magic import register_line_magic 

@register_line_magic 
def r(line): 
    get_ipython().run_line_magic('run', ' -i ' + line) 

del r 
Now: 

%r 

不一樣:

%run -i 
+0

這太棒了。 – Laurent

+1

非常有幫助。順便說一句,你有[upvote]的特權(http://stackoverflow.com/help/privileges/vote-up)。 ;) –

+0

根據它的文檔,這個'魔術'已被棄用。它建議'ip.run_line_magic(magic_name,line)'代替。 – hpaulj