Python的命令行参数解析

news/2024/12/5 5:02:31/

命令行参数解析在编程语言中基本都会碰到,Python中内置了一个用于命令项选项与参数解析的模块argparse。下面主要介绍两种解析Python命令行参数的方式。

1. sys.argv

解析Python中命令行参数的最传统的方法是通过sys.argv。Demo如下:

#!/usr/env/python python
# _*_ coding: utf-8 _*_import sysparam1 = sys.argv[1]
param2 = sys.argv[2]print sys.argv
print param1
print param2
print type(param1)
print type(param2)

复制

测试结果如下:

$ python test.py 1 2
['test.py', '1', '2']
1
2

复制

这种方法比较古老,灵活性很差,同时解析出来的参数都是str类型。但在编写简单脚本,参数较少且固定时比较方便。

2. argparse

argparse模块是Python内置的参数解析模块,使用起来比较简单且功能强大。Demo如下:

#!/usr/env/python python
# _*_ coding: utf-8 _*_import argparse# Create ArgumentParser() object
parser = argparse.ArgumentParser()# Add argument
parser.add_argument('--train', required=True, help='path to dataset')
parser.add_argument('--val', required=True, help='path to dataset')
parser.add_argument('--total', type=int, help='number of dataset', default=100)
parser.add_argument('--lr', type=float, default=0.01, help='learning rate')# Print usage
parser.print_help()# Parse argument
args = parser.parse_args()# Print args
print argsprint args.train
print type(args.train)
print args.val
print type(args.val)
print args.total
print type(args.total)
print args.lr
print type(args.lr)

复制

测试结果如下:

# Test 1
python test.py --train train_lmdb --val val_lmdb --total 10000 --lr 0.001
usage: test.py [-h] --train TRAIN --val VAL [--total TOTAL] [--lr LR]optional arguments:-h, --help     show this help message and exit--train TRAIN  path to dataset--val VAL      path to dataset--total TOTAL  number of dataset--lr LR        learning rate
Namespace(lr=0.001, total=10000, train='train_lmdb', val='val_lmdb')
train_lmdb
<type 'str'>
val_lmdb
<type 'str'>
10000
<type 'int'>
0.001
<type 'float'># Test 2
python test.py --train train_lmdb --val val_lmdb
usage: test.py [-h] --train TRAIN --val VAL [--total TOTAL] [--lr LR]optional arguments:-h, --help     show this help message and exit--train TRAIN  path to dataset--val VAL      path to dataset--total TOTAL  number of dataset--lr LR        learning rate
Namespace(lr=0.01, total=100, train='train_lmdb', val='val_lmdb')
train_lmdb
<type 'str'>
val_lmdb
<type 'str'>
100
<type 'int'>
0.01
<type 'float'># Test 3
python test.py --val val_lmdb --train train_lmdb
usage: test.py [-h] --train TRAIN --val VAL [--total TOTAL] [--lr LR]optional arguments:-h, --help     show this help message and exit--train TRAIN  path to dataset--val VAL      path to dataset--total TOTAL  number of dataset--lr LR        learning rate
Namespace(lr=0.01, total=100, train='train_lmdb', val='val_lmdb')
train_lmdb
<type 'str'>
val_lmdb
<type 'str'>
100
<type 'int'>
0.01
<type 'float'>

复制

ArgumentParser类创建时的参数如下:

  • prog - 程序的名字(默认:sys.argv[0])
  • usage - 描述程序用法的字符串(默认:从解析器的参数生成)
  • description - 参数帮助信息之前的文本(默认:空)
  • epilog - 参数帮助信息之后的文本(默认:空)
  • parents - ArgumentParser 对象的一个列表,这些对象的参数应该包括进去
  • formatter_class - 定制化帮助信息的类
  • prefix_chars - 可选参数的前缀字符集(默认:‘-‘)
  • fromfile_prefix_chars - 额外的参数应该读取的文件的前缀字符集(默认:None)
  • argument_default - 参数的全局默认值(默认:None)
  • conflict_handler - 解决冲突的可选参数的策略(通常没有必要)
  • add_help - 给解析器添加-h/–help 选项(默认:True)

add_argument函数的参数如下:

  • name or flags - 选项字符串的名字或者列表,例如foo 或者-f, –foo。
  • action - 在命令行遇到该参数时采取的基本动作类型。
  • nargs - 应该读取的命令行参数数目。
  • const - 某些action和nargs选项要求的常数值。
  • default - 如果命令行中没有出现该参数时的默认值。
  • type - 命令行参数应该被转换成的类型。
  • choices - 参数可允许的值的一个容器。
  • required - 该命令行选项是否可以省略(只针对可选参数)。
  • help - 参数的简短描述。
  • metavar - 参数在帮助信息中的名字。
  • dest - 给parse_args()返回的对象要添加的属性名称。

http://www.ppmy.cn/news/242833.html

相关文章

有什么可靠稳定的微信管理系统?

微信管理系统是什么 微信管理系统从字面上来说可以理解为微信的管理和营销系统。通俗一点来说就是利用微信与管理营销相结合的一种新型办公方式。 不用下载任何软件&#xff0c;不用多部手机&#xff0c;对手机没有任何型号要求&#xff0c;不需要刷机、越狱&#xff0c;不需…

C++内存序、屏障和原子操作

文章目录 一、原子类型二、原子操作函数三、内存序1&#xff09;happens-before和synchronizes-with语义2&#xff09;内存序模式 四、标准库函数五、栅栏&#xff08;Barrier&#xff09; 一、原子类型 标准原子类型的备选名和与其相关的 std::atomic<> 特化类&#xf…

新来个技术总监,把限流实现的那叫一个优雅,佩服!

在电商高并发场景下&#xff0c;我们经常会使用一些常用方法&#xff0c;去应对流量高峰&#xff0c;比如限流、熔断、降级&#xff0c;今天我们聊聊限流。 什么是限流呢&#xff1f;限流是限制到达系统的并发请求数量&#xff0c;保证系统能够正常响应部分用户请求&#xff0…

小米12回收能值多少钱

想买二手手机或者回收二手手机的缺不懂价格及其容易被坑&#xff0c;花冤枉钱这边给大家整理了二手小米12的市场价格&#xff08;数据来源&#xff1a;换换二手交易平台&#xff09;

小米10s参数配置 小米10s多少钱

外放音质是小米10S这次的主打卖点。据小米集团副总裁常程介绍&#xff0c;小米10S除了用上对称分布的双1216线性扬声器&#xff0c;还由哈曼卡顿「金耳朵」声学团队联合调试&#xff0c;以求最大程度还原声音。常程称&#xff0c;这是“小米有史以来音质最好的手机”。 小米10s…

小米的性价比还在吗?

iSmart-艾思 随着市场的成熟&#xff0c;以及各种元件成本的变化&#xff0c;目前已经出现了很多千元以下的双核智能手机、四核智能手机&#xff0c;这在去年还是不可想象的事情&#xff01; 这不近期就有一款小辣椒手机要上市&#xff0c;四核的也就卖999&#xff0c;真是&…

小米也打价格战?会有1999的小米2吗?

作为消费者最喜闻乐见的就是价格战&#xff0c;所以当刘强东在微博上宣布京东大家电3年零毛利&#xff0c;而且称将会无底线便宜&#xff0c;如果苏宁敢卖1元&#xff0c;京东的价格一定是0元时&#xff0c;微博沸腾了。电商行业在赚钱如此艰难的时候还如此为消费者着想&#x…

成为小米

成为小米 标题是标题党。此文核心文字是摘自NOP刘爽在虎嗅上的一篇文章&#xff0c;非我原创&#xff0c;因为说到点子上&#xff0c;所以摘录出来分享。 一、经营 能不能成大事就看四样东西&#xff1a; 1、 决定能不能做的大势&#xff1b;站在风口上、 2、 决定你能不能做…