如何使用argparse从命令行和代码传递参数?

时间:2019-06-13 09:44:46

标签: python command-line arguments parameter-passing argparse

我有一个使用许多参数并运行的python程序。使用argparse,我可以定义参数,它们的默认值,它们的解释,并且可以用作方便的容器。因此,从命令行传递参数非常有用。

但是我还可以使用它来传递代码中的参数以进行API调用吗?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

通过vars(),您可以像字典一样使用args。

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

答案 2 :(得分:0)

从终端运行此文件时,可以通过以下方式传递参数:

  

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

答案 3 :(得分:0)

是的,当然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)