如何为python argparse.parser提供代码内部的参数,而没有命令行参数?

时间:2019-05-29 23:00:56

标签: python python-3.x jupyter-notebook argparse

我有一个将命令行参数带入parser并修改某些配置设置的代码。像这样:

命令:

python mycode.py --config-file "some_file.yaml" SOMETHING.subsetting_a 2 SOMETHING.subsetting_b 3

然后执行:

import argparse
parser = argparse.ArgumentParser(description="Some description here")
parser.add_argument(
    "--config-file",
    default="",
    metavar="FILE",
    help="path to config file",
    type=str,
)
//some more 'add_argument' lines here
args = parser.parse_args()

但是当我使用jupyter notebook时,将参数直接提供给解析器会更容易,就像它们来自命令行一样。如何创建包含命令的字符串(如上所述)并将其传递给parser

2 个答案:

答案 0 :(得分:1)

parse_args's first optional argument is the list of arguments to parse,签名为:

  

ArgumentParser.parse_args(args=None, namespace=None)

如果您不提供,则只需从args中提取sys.argv

因此,将其称为:

args = parser.parse_args(['mycode.py', '--config-file', "some_file.yaml", 'SOMETHING.subsetting_a', '2', 'SOMETHING.subsetting_a'])

(其中list包含您喜欢的任何内容),它将代替sys.argv使用它。

答案 1 :(得分:0)

注意:如@ShadowRanger所述,无需使用 sudo a2dismod php7.2 sudo a2enmod php7.3 。看到他的回应。


一种方法是使用sys.argv模仿命令行参数:

sys.argv

args的内容有点像这样:

import sys

sys.argv = [
    "--config-file" , "some_file.yaml",
    "SOMETHING.subsetting_a" , "2",
    "SOMETHING.subsetting_b" , "3"]

args = parser.parse_args(sys.argv)

类似于> Namespace(config_file='some_file.yaml', opts=['SOMETHING.subsetting_a', '2', 'SOMETHING.subsetting_b', '3') 的输出。