您的位置:

Python命令行参数快速入门

一、理解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程序的调用更加方便和灵活。