Python命令行参数:调用函数

les*_*958 5 python command-line optparse command-line-arguments argparse

所以我陷入了一个我正在研究的涉及python命令行的项目.

基本上,这就是我想要完成的事情:

我在课堂上有一套功能,比方说,

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
Run Code Online (Sandbox Code Playgroud)

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

类似地,当用户放置时filename.py option3 param1 param2 param3,我希望它使用给定的参数执行do_option3函数.

我知道有2个模块的蟒蛇叫argparseoptparse,但我已经很难理解这两个,我不知道,如果单独两个会完成我需要做.

che*_*ner 8

使用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)
Run Code Online (Sandbox Code Playgroud)

然后,您do_option需要稍微重写每个函数以获取一个参数,从中可以提取所需的值.例如:

def do_option1(args):
    param1 = args.param1
    # And continue
Run Code Online (Sandbox Code Playgroud)


ale*_*inn 5

我使用此模板可能会对您有所帮助。

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
Run Code Online (Sandbox Code Playgroud)

然后,您可以运行脚本,传递如下参数:

python script.py --option1 my-option1 --option3 my-option3 --option2 my-option2
Run Code Online (Sandbox Code Playgroud)

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