使用 Python 从命令行接收参数:`argparse` 和 `sys.argv`

函数与模块   2024-06-11 23:02   263   0  

在编写命令行工具或脚本时,处理和解析命令行参数是一个基本需求。Python 提供了多种方式来实现这一功能,其中最常用的两种方法是使用 sys.argvargparse 模块。本文将详细介绍这两种方法,并展示如何在实际脚本中使用它们。

一、使用 sys.argv

sys.argv 是 Python 内置的一个列表,用于存储从命令行传递给脚本的参数。sys.argv[0] 通常是脚本的名称,从 sys.argv[1] 开始的元素是实际传递的参数。

示例代码

假设我们要编写一个脚本,该脚本接受两个数字作为参数,并输出它们的和:

import sys

def main():
   if len(sys.argv) != 3:
       print("Usage: python script.py <number1> <number2>")
       sys.exit(1)

   try:
       num1 = float(sys.argv[1])
       num2 = float(sys.argv[2])
   except ValueError:
       print("Both arguments must be numbers.")
       sys.exit(1)

   result = num1 + num2
   print(f"The sum of {num1} and {num2} is {result}")

if __name__ == "__main__":
   main()

运行示例

python script.py 3 5
The sum of 3.0 and 5.0 is 8.0

优缺点

优点

  • 简单直接,适合处理非常简单的参数。

缺点

  • 缺乏对参数类型和数量的更高级别的验证。

  • 难以处理复杂的参数解析逻辑。

二、使用 argparse

argparse 是 Python 标准库中的一个模块,用于解析命令行参数。与 sys.argv 相比,argparse 更加灵活和强大,可以轻松处理复杂的参数解析需求。

示例代码

下面是一个使用 argparse 的脚本,它接受两个数字作为参数,并输出它们的和:

import argparse

def main():
   parser = argparse.ArgumentParser(description="Add two numbers.")
   parser.add_argument("number1", type=float, help="First number")
   parser.add_argument("number2", type=float, help="Second number")
   
   args = parser.parse_args()

   result = args.number1 + args.number2
   print(f"The sum of {args.number1} and {args.number2} is {result}")

if __name__ == "__main__":
   main()

运行示例

python script.py 3 5
The sum of 3.0 and 5.0 is 8.0

优缺点

优点

  • 提供了丰富的参数类型和选项支持。

  • 自动生成帮助和使用信息。

  • 更易处理复杂的参数解析逻辑。

缺点

  • 对于非常简单的参数解析可能显得有些复杂。

三、总结

通过本文,我们了解了如何使用 sys.argvargparse 两种方式从命令行接收参数。sys.argv 适用于非常简单的参数解析,而 argparse 则提供了更为强大和灵活的功能,适合处理复杂的命令行参数需求。

无论是选择 sys.argv 还是 argparse,都取决于具体需求和脚本的复杂度。掌握这两种方法,我们将能够编写出更加健壮和用户友好的命令行工具。


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。