Как использовать `argparse` для передачи аргументов как из командной строки, так и из кода? - PullRequest
0 голосов
/ 13 июня 2019

У меня есть программа на Python, которая принимает много аргументов и запускается. С помощью argparse я могу определить аргументы, их значения по умолчанию, их объяснения, и его можно использовать в качестве удобного контейнера. Так что все хорошо для передачи аргументов из командной строки.

Но могу ли я также использовать его для передачи аргументов из кода для вызова API?

Ответы [ 4 ]

1 голос
/ 13 июня 2019
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument("-f", "--file", dest="filename",
                help="write report to FILE", metavar="FILE")
parser.add_argument("-q", "--quiet",
                action="store_false", dest="verbose", default=True,
                help="don't print status messages to stdout")

args = parser.parse_args()
0 голосов
/ 13 июня 2019

Да, конечно, argparse может использоваться для передачи аргументов как из командной строки, так и из кода.

Например:

import argparse

# Define default values
parser = argparse.ArgumentParser()
parser.add_argument('--foo', default=1, type=float, help='foo')

# Get the args container with default values
if __name__ == '__main__':
    args = parser.parse_args()  # get arguments from command line
else:
    args = parser.parse_args('')  # get default arguments

# Modify the container, add arguments, change values, etc.
args.foo = 2
args.bar = 3

# Call the program with passed arguments
program(args)
0 голосов
/ 13 июня 2019

При запуске этого файла из терминала вы можете передавать аргументы следующим образом:

python36 commandline_input.py 10

python36 commandline_input.py 10 --foo 12

Первый позиционный аргумент является обязательным, второй - необязательным, поэтому вам необходим флаг (--foo).

commandline_input.py:

import argparse


def main(mandatory_arg, optional_arg):
    # your program 
    pass


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    # mandatory
    parser.add_argument('bar', help='Some Bar help')
    # optional
    parser.add_argument('-f', '--foo', default='default foo value',
                        help='Some foo help')

    args = parser.parse_args()

    # mandatory args
    print(args.bar, '(man)')

    # optional args
    if args.foo:
        print(args.foo, '(opt)')

    # your API call
    main(args.bar, [args.foo])
0 голосов
/ 13 июня 2019

С vars() вы можете использовать свои аргументы как словари.

from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument("-f", "--foo")
parser.add_argument("-b", "--bar")

args = vars(parser.parse_args())
print(f"args foo is {args['foo']}")
print(f"args bar is {args['bar']}")

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

python3 test.py --foo cat --bar dog
args foo is cat
args bar is dog
...