2016-05-30 154 views
13

我想知道是否可以在jupyter/ipython筆記本中使用命令行參數填充sys.argv(或其他某種結構),類似於通過python腳本完成的操作。將命令行參數傳遞給jupyter/ipython筆記本中的argv

舉例來說,如果我要運行一個python腳本如下:

python test.py False

然後sys.argv將包含參數False。但是,如果我以同樣的方式運行jupyter筆記本:

jupyter notebook test.ipynb False

然後在命令行參數丟失。有沒有辦法從筆記本本身訪問這個參數?

+0

不需要。筆記本通常從筆記本儀表板加載,所以依靠命令行參數對它們沒有多大意義。如果您有興趣將輸入變量傳遞到筆記本中,請查看[nbparameterise](https://github.com/takluyver/nbparameterise),它有不同的處理方法。 –

回答

1

很多環顧四周後,我發現很繁瑣的自定義庫,但用幾行代碼解決了這個問題,我認爲這些代碼很漂亮。我使用nbconvert以html報告作爲輸出結果,其中包含筆記本電腦中的所有圖形和降價,但通過最小python包裝接受命令行參數:

python文件test_args.py(它需要命令線PARAMS爲正常):

import sys,os 
IPYNB_FILENAME = 'test_argv.ipynb' 
CONFIG_FILENAME = '.config_ipynb' 

def main(argv): 
    with open(CONFIG_FILENAME,'w') as f: 
     f.write(' '.join(argv)) 
    os.system('jupyter nbconvert --execute {:s} --to html'.format(IPYNB_FILENAME)) 
    return None 

if __name__ == '__main__': 
    main(sys.argv) 

筆記本包含:

import sys,os,argparse 
from IPython.display import HTML 
CONFIG_FILE = '.config_ipynb' 
if os.path.isfile(CONFIG_FILE): 
    with open(CONFIG_FILE) as f: 
     sys.argv = f.read().split() 
else: 
    sys.argv = ['test_args.py', 'input_file', '--int_param', '12'] 

parser = argparse.ArgumentParser() 
parser.add_argument("input_file",help="Input image, directory, or npy.") 
parser.add_argument("--int_param", type=int, default=4, help="an optional integer parameter.") 
args = parser.parse_args() 
p = args.int_param 
print(args.input_file,p) 

,我可以用解析照常參數運行蟒蛇筆記本:

python test_args.py my_input_file --int_param 12 

我傾向於將帶有argparse調用的塊粘貼到python包裝中,以便命令行錯誤被python腳本和-h正常工作。

+0

嘿,酷!謝謝你停下來。我很早就開始轉向其他項目,並且我確信當時我發現了一些簡單的解決方法,或者使用了您提到的一個繁瑣的庫。但這是一個很好的解決辦法,我會將它標記爲任何未來徵詢者的答案。 – justadampaul

9

我覺得這個要點可以幫助你:https://gist.github.com/gbishop/acf40b86a9bca2d571fa

這是一個簡單的參數解析器,可以在命令行和IPython的筆記本電腦上大多都鍵值對的嘗試。它支持筆記本URL中的查詢參數和筆記本的運行命令。

+0

歡迎您提供一個解決方案的鏈接,但是您的答案必須是自包含且有用的,即使鏈接:請引用或彙總您鏈接到的頁面中的相關信息,以防頁面無法使用。 –

-2

你可以在筆記本中使用Jupyter內置的魔術命令%run

從這個link,你可以使用:

%run -p [prof_opts] filename.py [args to program]

或者像%run -i script.py False

東西,或如果你正在分析的參數%run -i script.py --flag1 False --flag2 True

+4

這是另一個問題的答案。這回答了「如何從** Jupyter筆記本運行Python腳本**」的問題。最初的問題是「如何運行Jupyter筆記本**作爲腳本**,並具有**通過命令行選項的能力**」 –

相關問題