我想知道是否有可能sys.argv在jupyter / ipython笔记本中使用命令行参数填充(或其他结构),类似于通过python脚本完成操作的方式。
sys.argv
例如,如果我要按如下方式运行python脚本:
python test.py False
然后sys.argv将包含参数False。但是,如果我以类似方式运行jupyter笔记本:
False
jupyter notebook test.ipynb False
然后,命令行参数丢失。有什么方法可以从笔记本本身内部访问此参数?
在四处查看之后,我发现了非常麻烦的自定义库,但是用几行代码解决了它,我认为这很漂亮。我使用nbconvert最终以html报告作为输出,该报告包含笔记本中的所有图形和减价,但是像往常一样通过最小的python包装器接受命令行参数:
python文件test_args.py(正常使用命令行参数):
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笔记本:
python test_args.py my_input_file --int_param 12
我倾向于将带有argparse调用的块粘贴到python包装器中,以便python脚本捕获命令行错误,并且-h正常工作。