Импорт и использование функции, принимающей argparse в качестве параметра

Я пытаюсь импортировать программу и использовать в ней несколько функций, но у меня возникает проблема, связанная с argparse.

В функциях, которые я хотел бы использовать, создатель передает свои аргументы парсера функции следующим образом.

args = parser.parse_args()

def write_flash(esp, args):

    if args.compress is None and not args.no_compress:
    args.compress = not args.no_stub

    # verify file sizes fit in flash
    flash_end = flash_size_bytes(args.flash_size)
    for address, argfile in args.addr_filename:
        argfile.seek(0,2)  # seek to end
        if address + argfile.tell() > flash_end:

Мне интересно, как я могу использовать эту функцию в другой программе, которую я пишу. Могу ли я каким-то образом создать объект parser.parse_args () с теми же аргументами, что и он? Одна вещь, о которой я подумал, - это использовать subprocess.popen для его запуска следующим образом:

p = subprocess.Popen(['python', 'esptool.py', '--port',
'COM3', 'write_flash', '0x00000', 'boot_v1.7.bin', '0xfc000', 'esp_init_data_    default_v08.bin', '0xfb000',
'blank.bin', '0x01000', 'user1.1024.new.2.bin'])

Но это кажется далеко не идеальным. Я действительно не понимаю, как подойти к argparse в целом, и любая помощь будет очень признательна, спасибо.

Вы можете использовать from fileyouposted import args, и все аргументы будут проанализированы. Также обратите внимание, что необработанные аргументы cli всегда доступны в sys.argv.

Jared Smith 13.09.2018 18:23
args может быть любым объектом с такими атрибутами, как args.compress. argparse.Namespace - удобный способ создания такого объекта, но это может быть практически любой экземпляр класса.
hpaulj 13.09.2018 18:52
1
2
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

parse_args() возвращает объект Namespace. Вы можете просто создать его сами.

from argparse import Namespace`
args = Namespace()
args.compress = True
args.no_stub = 3
print(args)

а затем передайте его.

или Namespace(compress=True, no_stub=3)

hpaulj 13.09.2018 18:53

Другие вопросы по теме