所以我一直坚持我正在研究的一个涉及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
基本上,当用户将filename.py option2 param1
放入命令行时,我希望它调用函数do_option2
并将参数param1
传递给它。
类似地,当用户放置filename.py option3 param1 param2 param3
时,我希望它使用给定的参数执行do_option3函数。
我知道python中有2个名为argparse
和optparse
的模块,但我很难理解这两个模块,我不确定两者中是否有一个会完成我需要做的事情。
答案 0 :(得分: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)
然后,需要稍微重写每个do_option
函数以获取一个参数,从中可以提取所需的值。例如:
def do_option1(args):
param1 = args.param1
# And continue
答案 1 :(得分:4)
我使用这个可以帮助你的模板。
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
请注意,参数的位置并不重要,因为您在其值之前指定了参数的名称。
答案 2 :(得分:2)
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)
应该做的伎俩。您可能希望添加一些检查以确保用户至少向您的脚本传递一些参数。
答案 3 :(得分:1)
答案 4 :(得分:0)
如果你想直接传递参数而不使用标签,你可以只使用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