一、理解Python命令行参数
当我们在终端输入一条Python命令时,可能需要添加一些参数来指定程序的运行方式。这些参数一般以--或-为前缀,后面跟上参数名称和对应的值。
比如,我们执行python程序时指定一些参数:
$ python program.py --input input_file.txt --output output_file.txt --verbose
在这个例子中,--input、--output和--verbose都是程序的参数。--input和--output后面跟随的是文件名,--verbose则不需要值。Python提供了一个内置的模块argparse,可以用来解析命令行参数。
二、使用argparse模块
使用argparse模块可以使得从命令行中读取参数变得容易,下面是一个简单的例子,演示如何使用argparse模块解析命令行参数:
import argparse parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)') args = parser.parse_args() print(args.accumulate(args.integers))
在上述代码中,我们创建了一个ArgumentParser对象,在add_argument方法中添加了两个参数:integers和--sum。
其中,integers是一个位置参数,代表在程序中需要读取一个或多个整数。nargs='+'表示该参数可以接收多个整数值,最终会被转化成列表。metavar='N'指定当命令行参数出现问题时打印的参数名称。
--sum是一个可选参数,代表程序需要对接收到的整数进行操作。dest='accumulate'指定当参数出现时需要将其结果存储在args.accumulate中,而action='store_const'表示当此参数出现时,const=sum会存储在args.accumulate中,如果没有出现,const=default的值会被存储在args.accumulate中。
执行上述程序,传入参数为:1 2 3 4 5,则会执行结果为:15。
三、常用参数类型
argparse模块支持多种数据类型的参数,下面是一些常见的数据类型:
1. position(位置)
位置参数是必须提供的,它们按照它们被定义的顺序从命令行读取。例如:
parser = argparse.ArgumentParser() parser.add_argument("source") parser.add_argument("destination") args = parser.parse_args()
这将解析Python程序的命令行参数,程序必须包含两个参数(source和destination)的位置参数。执行结果为:
$ python program.py file1.txt file2.txt
2. Optional(可选)
可选参数是通过名称而不是位置指定的。例如:
parser = argparse.ArgumentParser() parser.add_argument("--source") parser.add_argument("--destination") args = parser.parse_args()
这个程序将读取两个可选参数--source和--destination。执行时可以不带可选参数:
$ python program.py
或者指定一个参数:
$ python program.py --source file1.txt
3. 支持多个值
argparse还提供了一个选项,允许一个参数多次使用。例如我们在命令行上传递多个文件名,可以使用:
parser = argparse.ArgumentParser() parser.add_argument("file_list", nargs="+") args = parser.parse_args()
参数nargs="+“允许file_list参数为多个值:
$ python program.py file1.txt file2.txt directory/*.txt
4. 布尔值
可以使用store_true / store_false选项,将程序中的布尔值参数处理为命令行选项。例如:
parser = argparse.ArgumentParser() parser.add_argument("--debug", action="store_true") args = parser.parse_args()
可选参数--debug现在是布尔类型的,如果提供了这个选项,Python中的args.debug将为True。否则为False。
四、处理命令行参数
在我们使用argparse程序解析了命令行参数后,我们仍然需要使用它们执行程序。下面的代码展示了如何使用argparse来处理命令行参数:
import argparse parser = argparse.ArgumentParser() parser.add_argument("--input", help="input file path") parser.add_argument("--output", help="output file path") parser.add_argument("--verbose", help="increase output verbosity", action="store_true") args = parser.parse_args() if args.verbose: print("verbose mode on") with open(args.input, "r") as infile, open(args.output, "w") as outfile: for line in infile: outfile.write(line) print("done")
在上述代码中,我们声明了三个可选参数--input、--output 和--verbose。--input和--output参数我们使用了help关键字为其添加描述。
在使用args.input和args.output时,需要判断传入的参数是否为None。通过判断args.verbose可以在程序中开启或关闭verbose模式,即输出更多信息。
五、总结
本文主要介绍了Python命令行参数的基础知识,以及使用argparse模块解析命令行参数的方法,同时列举了几种常见的命令行参数类型和处理方法。熟悉这些方法可以使得Python程序的调用更加方便和灵活。