2016-05-30 1039 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笔记本**作为脚本**,并具有**通过命令行选项的能力**” –