Python 命令行参数:调用函数

Python Command Line Arguments: Calling a function

所以我被困在我正在从事的项目中,该项目涉及 python 中的命令行。

基本上,这就是我要完成的工作:

我在 class 中有一组函数,比方说,

def do_option1(self, param1, param2) :
    #some python code here

def do_option2(self, param1): 
    #some python code here

def do_option3(self, param1, param2, param3):
    #some python code here

所以基本上,当用户将 filename.py option2 param1 放入命令行时,我希望它调用函数 do_option2 并将参数 param1 传递给它。

同样,当用户输入 filename.py option3 param1 param2 param3 时,我希望它使用给定的参数执行 do_option3 函数。

我知道 python 中有 2 个模块,分别称为 argparseoptparse,但我很难理解这两个模块,我不确定这两个模块是否一个人就能完成我需要完成的事情。

如果想不使用标签直接传参,直接使用sys模块即可:sys.argv会给你['filename.py', 'option3', 'param1', 'param2', 'param3']的命令行filename.py option3 param1 param2 param3

http://www.tutorialspoint.com/python/python_command_line_arguments.htm

options = {
    'option_1': my_class.option_1,
    'option_2': my_class.option_2,
    'option_3': my_class.option_3,
}

option, params = sys.argv[0], sys.argv[1:]
options[option](*params)

应该可以解决问题。您可能需要添加一些检查以确保用户至少向您的脚本传递了一些参数。

Execute function via arg

如已接受的答案所述,您可以(ab?)使用 add_argumenttype 参数来执行函数。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('option2', type=interface.do_option2)

args = parser.parse_args()

我使用的这个模板可能会对你有所帮助。

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('--option1', help='description for option1')
parser.add_argument('--option2', help='description for option2')
parser.add_argument('--option3', help='description for option3')

args = parser.parse_args()

if args.option1:
    ...do something

if args.option2:
    ...do something

if args.option3:
    ...do something

然后您可以 运行 您的脚本传递这样的参数:

python script.py --option1 my-option1 --option3 my-option3 --option2 my-option2

请注意,参数的位置并不重要,因为您在其值之前指定了参数的名称。

使用 argparse 子命令解析器

p = argparse.ArgumentParser()
subparsers = p.add_subparsers()

option1_parser = subparsers.add_parser('option1')
# Add specific options for option1 here, but here's
# an example
option1_parser.add_argument('param1')
option1_parser.set_defaults(func=do_option1)

option2_parser = subparsers.add_parser('option2')
# Add specific options for option1 here
option2_parser.set_defaults(func=do_option2)

option3_parser = subparsers.add_parser('option3')
# Add specific options for option3 here
option3_parser.set_defaults(func=do_option3)

args = p.parse_args()
args.func(args)

然后您的每个 do_option 函数都需要稍微重写以采用单个参数,从中可以提取所需的值。例如:

def do_option1(args):
    param1 = args.param1
    # And continue