Python argparse库设置命令行参数从入门到深刻入门

先从最简单的示例开始:

首先是位置参数的使用

  • 定义方式:位置参数在命令行中按照特定的顺序出现,且不需要前缀(如 - 或 --)。
  • 提供方式:用户在命令行中直接按照定义的顺序提供值。
  • 特点:位置参数是必需的,除非你在 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)
  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值