QZQ的小世界!

  • 首页
你好!
这里是QZQ的博客站!
  1. 首页
  2. 未分类
  3. 正文

ArgParse-用命令行控制python脚本

2025年4月4日 62点热度 0人点赞 0条评论

argparse --- 命令行选项、参数和子命令解析器 — Python 3.11.2 文档

Python 命令行参数:Argparse 与 Click_click和argparse_半点闲的博客-CSDN博客

Basic

argparse 模块是python内置的一个用于命令项选项与参数解析的模块,argparse 模块可以让人轻松编写用户友好的命令行接口。

import argparse

parser = argparse.ArgumentParser(description='test')

parser.add_argument('--sparse', action='store_true', default=False, help='GAT with sparse version or not.')
parser.add_argument('--seed', type=int, default=72, help='Random seed.')
parser.add_argument('--epochs', type=int, default=10000, help='Number of epochs to train.')

args = parser.parse_args()
print(args.sparse)
print(args.seed)
print(args.epochs)

基本的使用流程如下所示:

1、创建一个解析器——创建 ArgumentParser() 对象

2、添加参数——调用 add_argument() 方法添加参数

3、解析参数——使用 parse_args() 解析添加的参数

add_argument() 方法

参数解释,其余的可以去查询官方文档

name or flags

选项字符串的名字或者列表,例如 foo 或者 -f, --foo。

action

命令行遇到参数时的动作,默认值是 store。即直接储存输入的参数。

如果调整该值为 store_true 的话,那么代码行为就会变成,但凡有任何输入,该参数返回True;若无则返回False

default

不指定参数时的默认值

Type

输入的参数该被转换成的类型

help

参数的帮助信息,当指定为 argparse.SUPPRESS 时表示不显示该参数的帮助信息

命令行

argparse有一个好处就是可以直接通过命令行来控制python脚本的参数输入,比如

# 显示description
python new.py -h

# 更改seed参数为50
python new.py --seed 50

获得不同的参数命名空间

详见 argparse --- 命令行选项、参数和子命令解析器 — Python 3.12.0 文档

写了一个训练模型的脚本,使用argparse包来统筹参数。但是一部分参数是用于模型训练,比如学习率,weight_decay等等;一部分参数用来指定输出的文件,控制dataloader的行为等。如果想每次训练保存模型使用的参数,那就不可避免的需要将参数分别存放,此时就可以使用subparsers

一个python文件中如果有多个命名空间,可以用此方法。

import argparse

train_parser = argparse.ArgumentParser(description='test1')
sub1 = train_parser.add_subparsers(title='my_sub parser')

a = sub1.add_parser('sub1')
a.add_argument('--epochs', type=int, default=60)
a.add_argument('--pos_weight', type=int, default=30,
               help='a ratio adapted when ture sample was classified properly')

b = sub1.add_parser('sub2')
b.add_argument('--test', type=int, default=123)

test_args = train_parser.parse_args(['sub2'])
print(test_args.__dict__)  # 打印出的结果是 {'test': 123}
test_args = train_parser.parse_args(['sub1'])
print(test_args.__dict__)  # 打印出的结果是 {'epochs': 60, 'pos_weight': 30}

这种方法实现了分组管理参数,并且可以拥有不同的命名空间。

写一个go.py文件,内容如下

import argparse

train_parser = argparse.ArgumentParser(description='test1')
sub1 = train_parser.add_subparsers(title='my_sub parser')

a = sub1.add_parser('sub1')
a.add_argument('--epochs', type=int, default=60)
a.add_argument('--pos_weight', type=int, default=30,
               help='a ratio adapted when ture sample was classified properly')

b = sub1.add_parser('sub2')
b.add_argument('--test', type=int, default=123)

test_args = train_parser.parse_args()

在命令行进行调试

>>> python3 go.py -h
usage: go.py [-h] {sub1,sub2} ...

test1

options:
  -h, --help   show this help message and exit

my_sub parser:
  {sub1,sub2}
>>> python3 go.py sub1 -h
usage: go.py sub1 [-h] [--epochs EPOCHS] [--pos_weight POS_WEIGHT]

options:
  -h, --help            show this help message and exit
  --epochs EPOCHS
  --pos_weight POS_WEIGHT
                        a ratio adapted when ture sample was classified properly

然后尝试传入参数

import argparse

train_parser = argparse.ArgumentParser(description='test1')
train_parser.add_argument('--test2', type=int, default=32)

sub1 = train_parser.add_subparsers(title='my sub parser')
a = sub1.add_parser('sub1')
a.add_argument('--epochs', type=int, default=60)
a.add_argument('--pos_weight', type=int, default=30,
               help='a ratio adapted when ture sample was classified properly')

b = sub1.add_parser('sub2')
b.add_argument('--test', type=int, default=123)

x3 = train_parser.parse_args()
print(x3)

进行测试

>>> python3 go.py sub1 --epochs 40
Namespace(test2=32, epochs=40, pos_weight=30)

还可以进行单独的解析器解析

train_parser.parse_args()
x = b.parse_args()
print(x)
>>> python3 go.py --test 33
Namespace(test=33)

[文章导入自 http://qzq-go.notion.site/faf5d369e0fd4bde95f672ffaa825b44 访问原文获取高清图片]

本作品采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
标签: IT技术 Python Python库介绍 Python标准库
最后更新:2025年4月3日

QZQ

一只涉猎广泛的技术爱好者,绝赞养猫中~

点赞
< 上一篇
下一篇 >

归档

  • 2025 年 4 月
  • 2025 年 3 月
  • 2025 年 2 月
  • 2025 年 1 月
  • 2024 年 12 月
  • 2024 年 11 月

分类

  • 技术
  • 未分类

COPYRIGHT © 2024 QZQ的小世界!. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang