如何在 jupyter notebook 上使用解析参数调用 python 脚本

How to call a python script with parsing arguments on jupyter notebook

我有一个我定义的 python 脚本:

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--task', type=str)
    parser.add_argument('--scale', type=int)
    args = parser.parse_args()
    ... # Do things with my arguments

if __name__ == '__main__':
        main()

我在命令行上调用这个脚本来做:

python myscript.py --task mytask --scale 1

我想在 jupyter notebook 中调用这个脚本。有没有办法解析参数而不修改我的脚本?即,做一些看起来像这样的事情:

import myscript    
myscript.main(--task=mytask,scale=1)

P.S.: 我尝试使用诸如 %run 之类的魔法线(这可能也适用于我的情况)但是我在收集脚本的 returns 时遇到了问题。

您可以将 args 传递给 parser.parse_args:

# myscript.py
import argparse

def main(args=None):
    parser = argparse.ArgumentParser()
    parser.add_argument('--task', type=str)
    parser.add_argument('--scale', type=int)
    args = parser.parse_args(args=args)
    print("task is: ", args.task)
    print("scale is: ", args.scale)

if __name__ == "__main__":
    main()

cli 的输出:

python3 myscript.py --task aaa --scale 10
# task is:  aaa
# scale is:  10

来自 python

的输出
import myscript

myscript.main("--task aaa --scale 10".split())

# task is:  aaa
# scale is:  10