在我们写 Python 脚本时,有时候如果能从命令行读取参数,那就减少了我们在源代码里直接指定某些参数的情况,从而减少我们对代码的反复修改。但是解析命令行参数这工具,我已经忘了好多次了,因此做个笔记记录下。读取命令行参数的模块包括 sys, argparser

sys

该模块比较简单,用一个示例即可说明了。

import sys

# 参数个数
len(sys.argv)
# 脚本名
sys.argv[0]
# 命令行参数参数, `i>0`
sys.argv[i]

argparser

在学习 argparser 之前需要分清位置参数和可选参数,比如 mv src dst 指令中的 srcdst 就是位置参数,程序如何处理他们和他们的位置是相关的。而可选参数则形如 ls -l 中的 -l,这个参数会导致信息更详细的信息。[^1]

首先需要导入这个模块 import argparse,然后实例化我们的 parser=argparse.ArgumentParser

add_argument:我们使用这个方法指定程序接受的命令行选项

  1. 位置参数
# 添加一个名字叫 `my_arg` 的命令行选项
parser.add_argument('my_arg')
args = parser.parse_args()
# 捕获到的参数可以通过 `args.my_arg` 获取,并通过 `type` 指定参数类型
args = parser.add_argument('my_arg', help='additional information here', type=int)
  1. 可选参数

同样的我们也能指定可选参数

# 用 `--` 来提示这是一个可选参数
parser.add_argument('--option')
args = parser.parse_args()
# 通过 `args.option` 来获取可选参数的值

一些注意事项:

  • 可选参数未被指定时,可选参数被赋值为 None
  • 使用可选参数时,必须为其指定一个值

如果我们可选参数只想捕获真值,我们可以设置一个参数来达到使用参数则为真,不使用参数则为假的效果,此时不需要我们在命令行中为可选参数中指定真值了。具体的做法如下

parser.add_argument('--option', action="store_true")

不过使用了这种做法后,就不能再给可选参数赋值了。然后我们还可以添加这个命令的短版本

parser.add_argument('-o', '--option', action='store_true')

不过这里的短命令最好使用一个 - 了,因为经过测试可以发现,解析出的可选参数名字是 add_argument 中的第一个 -- 后的名字

References

[^1]:argparse教程-Python 3.12.0 教程