сбор входных файлов из командной строки в unix с использованием библиотеки argparse - PullRequest
0 голосов
/ 12 апреля 2020

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

main_script.py -flag1 -file_for_flag_1 another_file_for_flag_1

и

main_script.py -flag2 -file_for_flag_2

Я пытался использовать библиотеку argparse, но я не знаю, как взять входные файлы в качестве аргументов для следующих шагов и манипулировать ими, как я хочу. Я начал с:

parser = argparse.ArgumentParser(description="Processing inputs")
parser.add_argument(
    "-flat_map",
    type=str,
    nargs="+",
    help="generates a flat addressmap from the given files",
)
parser.add_argument(
    "-json_convert",
    type=str,
    nargs="+",
    help="generates a flat addressmap from the given files",
)
args = parser.parse_args(args=["-flat_map"])
print(args)

В конце я напечатал args, чтобы посмотреть, что я от него получу, но у меня не было ничего, с чем я мог бы работать. Хотел бы иметь некоторое руководство. Спасибо.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

Используя argparse, вы можете использовать подкоманды для выбора подмодулей:

import argparse

def run_command(parser, args):
    if args.command == 'command1':
        # add code for command1 here
        print(args)
    elif args.command == 'command2':
        # add code for command2 here
        print(args)

parser = argparse.ArgumentParser(
    prog='PROG', 
    epilog="See '<command> --help' to read about a specific sub-command."
)
subparsers = parser.add_subparsers(dest='command', help='Sub-commands')

A_parser = subparsers.add_parser('command1', help='Command 1')
A_parser.add_argument("--foo")
A_parser.add_argument('--bar')
A_parser.set_defaults(func=run_command)

B_parser = subparsers.add_parser('command2', help='Command 2')
B_parser.add_argument('--bar')
B_parser.add_argument('--baz')
B_parser.set_defaults(func=run_command)

args = parser.parse_args()
if args.command is not None:
    args.func(parser, args)
else:
    parser.print_help()

Это создает страницу справки примерно так:

~ python args.py -h
usage: PROG [-h] {command1,command2} ...

positional arguments:
  {command1,command2}  Sub-commands
    command1           Command 1
    command2           Command 2

optional arguments:
  -h, --help           show this help message and exit

See '<command> --help' to read about a specific sub-command.

и help текст для каждого подкоманда:

~ python args.py B -h
arg.py command2 -h
usage: PROG command2 [-h] [--bar BAR] [--baz BAZ]

optional arguments:
  -h, --help  show this help message and exit
  --bar BAR
  --baz BAZ
0 голосов
/ 12 апреля 2020

Вы можете преобразовать args в dict (где ключ - это опция arg, а значение - значение arg), если вам удобнее:

args_dict = {key: value for key, value in vars(parser.parse_args()).items() if value}
...