Как предоставить python argparse.parser с аргументами изнутри кода, без аргументов командной строки? - PullRequest
0 голосов
/ 30 мая 2019

У меня есть код, который принимает аргументы командной строки в 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, было бы легче обеспечитьаргументы непосредственно в синтаксический анализатор, как если бы они пришли из командной строки.Как я могу создать строку, содержащую команду (как упоминалось выше) и передать ее parser?

Ответы [ 2 ]

1 голос
/ 30 мая 2019

parse_args Первый необязательный аргумент - это список аргументов для разбора , подпись:

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.

0 голосов
/ 30 мая 2019

Примечание: как уже упоминалось @ShadowRanger, нет необходимости использовать sys.argv. Смотри его ответ.


Одним из способов является использование sys.argv для имитации аргументов командной строки:

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')

, что аналогично выводу print(parser.parse_args()).

...