自学内容网 自学内容网

python命令行参数

在 Python 中,你可以使用 argparse 模块来处理命令行参数。argparse 模块可以让你轻松地定义程序期望接收的参数,并自动生成帮助信息。

下面是使用 argparse 模块进行命令行参数处理的详细介绍:

1. 导入 argparse 模块:

import argparse

2. 创建 ArgumentParser 对象:

parser = argparse.ArgumentParser(description="This is a sample script for command line arguments.")
  • ArgumentParserargparse 模块的核心类。
  • description 参数用于描述你的程序的功能,这部分会显示在帮助信息中。

3. 添加命令行参数:

你可以使用 add_argument() 方法来添加命令行参数。

3.1. 位置参数 (Positional Arguments):

位置参数是必须传递的参数,并且其顺序很重要。

parser.add_argument("input_file", help="Path to the input file.")
parser.add_argument("output_file", help="Path to the output file.")
  • input_fileoutput_file 是参数的名字。
  • help 参数用于提供参数的描述,会在帮助信息中显示。

3.2. 可选参数 (Optional Arguments):

可选参数不是必须的,通常使用 -- 前缀。

parser.add_argument("--learning_rate", type=float, default=0.001, help="Learning rate for training.")
parser.add_argument("-b", "--batch_size", type=int, default=32, help="Batch size for training.")
parser.add_argument("--epochs", type=int, default=100, help="Number of training epochs.")
parser.add_argument("-v", "--verbose", action="store_true", help="Enable verbose output.")
  • --learning_rate, --batch_size, --epochs--verbose 是参数的名字。
  • type 参数指定参数的类型 (例如 int, float, str, etc.).
  • default 参数指定参数的默认值,如果用户没有提供该参数,则使用默认值。
  • help 参数用于提供参数的描述。
  • action="store_true" 表示该参数是一个布尔值,当用户指定该参数时,其值会变成 True,否则是 False
  • 可以使用短参数 (如 -b-v),这需要和长参数对应。

4. 解析命令行参数:

args = parser.parse_args()
  • parse_args() 方法会解析命令行输入的参数,并将其存储在一个 Namespace 对象中。
  • 你可以通过 args.parameter_name 的方式访问参数值。

5. 使用命令行参数:

if args.verbose:
    print(f"Input file: {args.input_file}")
    print(f"Output file: {args.output_file}")
    print(f"Learning rate: {args.learning_rate}")
    print(f"Batch size: {args.batch_size}")
    print(f"Number of epochs: {args.epochs}")

# 使用参数进行后续的操作
# ...

完整示例:

import argparse

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="This is a sample script for command line arguments.")

    # Add positional arguments
    parser.add_argument("input_file", help="Path to the input file.")
    parser.add_argument("output_file", help="Path to the output file.")

    # Add optional arguments
    parser.add_argument("--learning_rate", type=float, default=0.001, help="Learning rate for training.")
    parser.add_argument("-b", "--batch_size", type=int, default=32, help="Batch size for training.")
    parser.add_argument("--epochs", type=int, default=100, help="Number of training epochs.")
    parser.add_argument("-v", "--verbose", action="store_true", help="Enable verbose output.")

    # Parse command line arguments
    args = parser.parse_args()

    # Use arguments in your code
    if args.verbose:
        print(f"Input file: {args.input_file}")
        print(f"Output file: {args.output_file}")
        print(f"Learning rate: {args.learning_rate}")
        print(f"Batch size: {args.batch_size}")
        print(f"Number of epochs: {args.epochs}")
    
    # 执行一些使用参数的逻辑,例如:
    # with open(args.input_file,'r') as f:
    #   data = f.read()
    # ...
    print("Done!")

如何运行代码:

  1. 保存代码: 将上述代码保存为例如 my_script.py 文件。

  2. 运行代码:

    • 使用位置参数:
      python my_script.py input.txt output.txt
      
    • 使用可选参数:
      python my_script.py input.txt output.txt --learning_rate 0.01 -b 64 --epochs 200 -v
      
    • 查看帮助信息:
      python my_script.py -h
      
      这会显示你的程序的使用方法和所有定义的参数。

其他常用的 add_argument() 参数:

  • choices: 限制参数的可选值。例如 choices=["adam", "sgd"],确保用户提供的优化器参数只能在 “adam” 或 “sgd” 中选择。
  • nargs: 指定参数应该接收多少个值。
    • nargs='+': 至少接收一个值,例如 add_argument("--list",nargs="+", type=int) ,在命令行输入 --list 1 2 3 , 则 args.list 会是 [1,2,3]
    • nargs='*': 可以接收 0 个或多个值。
    • nargs=N: 接收 N 个值。
  • dest: 覆盖默认的参数名。 默认的参数名会使用 -- 后面的名字, 例如--learning_rate, 对应的参数名就是 learning_rate. 你可以使用 dest 来覆盖, 例如add_argument("--lr", dest="learning_rate"), 则你可以用 args.learning_rate 而不是 args.lr
  • required: 将一个可选参数设置为必选参数, 例如 add_argument("--required_arg", required=True)
  • type=argparse.FileType('r'): 当参数是文件路径,且需要读该文件的时候,可以使用该类型指定。 命令行输入文件路径后,程序可以直接使用这个文件对象,而无需自己打开。

原文地址:https://blog.csdn.net/weixin_45792450/article/details/145120659

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!