2016-07-05 50 views
1

是否可以向IPython的魔法命令添加自定義標誌?更具體地講,我想用%運行命令用自制的標誌:如何添加自定義標誌到IPython的魔法命令? (.ipy文件)

%run script.ipy --flag "option" 

,並能夠使用「選項」裏面的腳本。

對於.py文件,答案就在這裏提供:Command Line Arguments In Python

+2

你有試過嗎?什麼沒有用? –

+0

語法有效,但我不知道如何訪問腳本中的標誌。 – Laurent

+0

可以使用鏈接問題中提供的方法之一(例如'argparse'),或者使用'import sys; sys.argv'直接(這是一個列表) –

回答

0

正如在評論中指出的,這個問題不只是在Python腳本處理命令行參數。這是關於通過%run.ipy文件中處理它們。

如果我創建test.ipy作爲

import sys 
print(sys.argv) 

,並從shell中運行它,我看到了命令行參數:

1223:~/mypy$ python3 test.ipy -test foo 
['test.ipy', '-test', 'foo'] 

但是從ipython會議上,我不

In [464]: %run test.ipy --flag test 
['/usr/bin/ipython3'] 

如果我用py名稱複製

In [468]: %run testipy.py --flag test 
['testipy.py', '--flag', 'test'] 

因此,%run ...ipy行爲有所不同。這是一個ipython問題,不是一般的Python命令行。

================

%run文檔具有了這一點:

有一個特殊的使用情況,其上面的文字不如果文件名以.ipy [nb]結尾,則應用: ,該文件作爲ipython腳本運行, 就好像命令是在IPython提示符上編寫的一樣。

在這種情況下,test.ipy腳本看到了同樣的sys.argv,我當我輸入做:

In [475]: sys.argv 
Out[475]: ['/usr/bin/ipython3'] 

所以,如果我修改sys.argv在當前會話中,如通過附加幾個字符串:

In [476]: sys.argv += ['--flag','test'] 

In [477]: sys.argv 
Out[477]: ['/usr/bin/ipython3', '--flag', 'test'] 

In [479]: %run test.ipy 
['/usr/bin/ipython3', '--flag', 'test'] 

我的ipy腳本現在看到它們。

所以這就是答案 - 在使用%run ...ipy之前將命令行參數放入sys.argv

(我已經做了這種與​​做先進的東西時,與sys.argv擺弄的。)

更多ipython魔術

In [480]: %run?? 

顯示我的文檔和代碼兩者。因此,我可以看到它是如何處理.ipy文件特殊的。既然它很容易找到,我不會在這裏複製它。

還有另一種解決方案 - 不要試圖使用ipy文件的命令行編碼風格。

如果我添加一個

print(x) 

線到測試文件,並在我的IPython會話中定義的x,我看到打印。但是我在.py裏放了同一張照片,我會得到一個Nameerror。當他們說ipy就像輸入的那樣運行時,它們就是這個意思。實際上,運行ipy是來自剪貼板的%paste的替代方案。

+0

在許多情況下有趣且有幫助,但在我的情況下它不會。 「測試」必須是任何字符串(它充當用戶添加評論的方式)。另外我需要使用.ipy文件,因爲我在調用魔術命令。 – Laurent

+0

你可能不得不舉一個更具體的例子。 'main'命名空間和'ipy's'之間有什麼關係?也許'%run'不是正確的工具。 – hpaulj

+0

你用什麼魔法?像'%hist'這樣的訪問當前命名空間的東西?或'%ls'可以在獨立的'ipython'會話中運行? – hpaulj