Python 提供了几种方法来处理我们从命令行调用程序时传递的参数。
到目前为止,你已经从 REPL 中运行程序,或者使用
这样做时,你可以传递额外的参数和选项,像这样。
python <filename>.py <argument1>
python <filename>.py <argument1> <argument2>
处理这些参数的一个基本方法是使用标准库中的sys 模块。
你可以在sys.argv 列表中获得传递的参数。
import sys
print(len(sys.argv))
print(sys.argv)
sys.argv 列表中的第一项是被运行的文件名,例如:['main.py'] 。
这是一个简单的方法,但你必须做很多工作。你需要验证参数,确保它们的类型是正确的,如果用户没有正确使用程序,你需要向他们打印反馈。
Python 在标准库中提供了另一个包来帮助你:argparse 。
首先你导入argparse ,然后调用argparse.ArgumentParser() ,传入你的程序的描述。
import argparse
parser = argparse.ArgumentParser(
description='This program prints the name of my dogs'
)
然后你继续添加你想接受的参数。 例如在这个程序中,我们接受-c 选项来传递颜色,像这样。python program.py -c red
import argparse
parser = argparse.ArgumentParser(
description='This program prints a color HEX value'
)
parser.add_argument('-c', '--color', metavar='color', required=True, help='the color to search for')
args = parser.parse_args()
print(args.color) # 'red'
如果没有指定参数,程序会产生一个错误。
➜ python python program.py
usage: program.py [-h] -c color
program.py: error: the following arguments are required: -c
你可以使用choices ,将一个选项设定为具有一组特定的值。
parser.add_argument('-c', '--color', metavar='color', required=True, choices={'red','yellow'}, help='the color to search for')
➜ python python program.py -c blue
usage: program.py [-h] -c color
program.py: error: argument -c/--color: invalid choice: 'blue' (choose from 'yellow', 'red')
还有更多的选项,但这些是最基本的。
而且还有一些社区包也提供了这种功能,如Click和Python Prompt Toolkit。