先从最简单的示例开始:
首先是位置参数的使用
- 定义方式:位置参数在命令行中按照特定的顺序出现,且不需要前缀(如
-
或--
)。 - 提供方式:用户在命令行中直接按照定义的顺序提供值。
- 特点:位置参数是必需的,除非你在
add_argument()
中指定了nargs='?'
,这样它就可以是可选的。
位置参数之所以被称为“位置参数”,是因为它们的位置(在命令行中的顺序)决定了它们的值。换句话说,这些参数的值是根据它们在命令行中出现的顺序来确定的,而不是通过名称来指定的。
import argparse
parser = argparse.ArgumentParser(description='一个简单的加法计算器')
parser.add_argument('number1', type=int, help='第一个加数')
parser.add_argument('number2', type=int, help='第二个加数')
args = parser.parse_args()
result = args.number1 + args.number2
print(f'{args.number1} + {args.number2} = {result}')
'''
>>>python calculator.py 5 10
5 + 10 = 15
'''
然后是可选参数
- 定义方式:可选参数以
-
(短选项)或--
(长选项)开头,并且可以出现在命令行中的任何位置。 - 提供方式:用户可以通过在命令行中附加选项和值(如果有的话)来提供可选参数。
- 特点:可选参数是可选的,它们可以有默认值,并且可以被用户覆盖。
import argparse
parser = argparse.ArgumentParser(description='一个只包含可选参数的示例脚本')
parser.add_argument('-n', '--name', help='你的名字')
parser.add_argument('-a', '--age', type=int, help='你的年龄')
args = parser.parse_args()
if args.name and args.age:
print(f"你好,{args.name}!你今年{args.age}岁了。")
else:
print("你没有提供足够的信息。")
合起来:
import argparse
import shutil
# 创建 ArgumentParser 对象
parser = argparse.ArgumentParser(description='一个简单的文件复制工具')
'''source 和 destination 是位置参数,分别代表源文件和目标文件的路径。它们在命令行中是必需的,并且按照定义的顺序出现。
--verbose 是一个可选参数,通过添加 action='store_true',当该参数在命令行中出现时,args.verbose 将被设置为 True,否则默认为 False。'''
# 添加位置参数
parser.add_argument('source', type=str, help='源文件的路径')
parser.add_argument('destination', type=str, help='目标文件的路径')
# 添加可选参数
parser.add_argument('--verbose', action='store_true', help='启用详细输出')
# 解析命令行参数
args = parser.parse_args()
# 定义文件复制的函数
def copy_file(source_path, destination_path, verbose):
try:
# 复制文件
shutil.copy(source_path, destination_path)
if verbose: # 当命令行参数出现--verbose时,verbose为true
print(f'文件已从 {source_path} 复制到 {destination_path}')
except Exception as e:
print(f'复制过程中发生错误: {e}')
# 调用函数执行文件复制操作
copy_file(args.source, args.destination, args.verbose)
'''
$ python copy_script.py source.txt destination.txt
复制 source.txt 到 destination.txt,并且不会输出任何额外信息(因为 --verbose 没有被指定)
$ python copy_script.py source.txt destination.txt --verbose
复制文件并输出一条确认信息,因为 --verbose 参数被指定了
'''
深刻入门[doge]:👉看注释,看完基本上日常使用就没问题了
import argparse
# 创建一个ArgumentParser对象
# description参数提供了程序的简短描述,而epilog参数提供了帮助信息的自定义结尾。
parser = argparse.ArgumentParser(description='一个简单的命令行计算器', epilog='这是一个自定义的帮助信息结尾')
# 定义位置参数名称:'numbers' 是这个位置参数的名称。在解析命令行参数后,可以通过 args.numbers【←这是一个列表】 来访问传递给这个参数的值。
# 【除了让人困惑以外没啥卵用】设置元变量名称:metavar='N' 指定了在帮助信息中显示的参数名称。当用户请求帮助时(如python script.py --help),他们会看到这个 N 作为参数的占位符。
# 指定参数类型:type=float 指定了参数的类型应该是浮点数。这意味着传递给 'numbers' 参数的值会被自动转换为浮点数类型。
# 设置参数数量:nargs='+' 指定了 'numbers' 参数应该接收一个或多个值。+ 符号表示至少需要一个值,而用户可以提供多个值,这些值将被收集到一个列表中。
# 提供帮助信息:help='要进行计算的数字' 提供了一条简短的描述,解释了这个参数的作用。这条信息将出现在程序的帮助输出中。
# 这行代码定义了一个名为 'numbers' 的位置参数,它接收一个或多个浮点数,并将这些数值收集到一个列表中。这个列表之后可以用于执行各种数值计算。
# 如果运行 python script.py 1.5 2.3 4.6,args.numbers 将会是一个包含 [1.5, 2.3, 4.6] 的列表。
parser.add_argument('numbers', metavar='N', type=float, nargs='+', help='要进行计算的数字')
# 当用户通过命令行指定 -a或--add 选项时,
# 程序会将一个执行加法运算的函数【const=sum】存储【action='store_const'】到 args.operation 属性【 dest='operation'】中。
# 之后,程序可以使用这个函数来执行加法运算。
parser.add_argument('-a','--add', dest='operation', action='store_const', const=sum, default=sum, help='执行加法运算 (默认操作)')
# 当用户通过命令行指定 -m或--multiply 选项时,
# 程序会将一个执行乘法运算的匿名函数【const=lambda x: x[0] * x[1]】存储【action='store_const'】到 args.operation 属性【dest='operation'】中。
# 之后,程序可以使用这个函数来执行乘法运算。
parser.add_argument('-m','--multiply', dest='operation', action='store_const', const=lambda x: x[0] * x[1], help='执行乘法运算')
# 使用parse_args方法解析命令行参数
args = parser.parse_args()
# args.operation是一个函数,args.numbers是一个列表,因此可以直接调用args.operation(args.numbers)进行计算
result = args.operation(args.numbers)
print(result)