argparse模块:python快捷实现命令行操作

https://oldpan.me/archives/argparse-python-order-command
基本操作:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo")
args = parser.parse_args()
print(args.echo)

执行以下命令:

$python3 test.py
usage: test.py [-h] echo
test.py: error: the following arguments are required: echo

$python3 test.py -h
usage: test.py [-h] echo

positional arguments:
  echo

optional arguments:
  -h, --help  show this help message and exit

$python3 test.py foo
foo

接着修改:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo", help="echo the string you use here")
args = parser.parse_args()
print(args.echo)

然后得到:

$python3 test.py -h
usage: test.py [-h] echo

positional arguments:
  echo        echo the string you use here

optional arguments:
  -h, --help  show this help message and exit

在加进一步:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a squre of a given number")
args = parser.parse_args()
print(args.square**2)

结果:

$python3 test.py 4
Traceback (most recent call last):
  File "test.py", line 5, in <module>
    print(args.square**2)
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

这样直接进行操作会发生错误,因为模块默认将输入的参数识别为string类型,我们只有明确表明为int型才可以进行**操作。
修改:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a squre of a given number",type=int)
args = parser.parse_args()
print(args.square**2)

结果:

$python3 test.py 4
4

$python3 test.py four
usage: test.py [-h] square
test.py: error: argument square: invalid int value: 'four'

接下来介绍“可选”参数:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="increase output verbosity")
args = parser.parse_args()
if args.verbosity:              ## 当不使用--verbosity时,该参数为None
    print("verbosity turned on")

输出:

$python3 test.py --verbosity 1
verbosity turned on

$python3 test.py --verbosity 0
verbosity turned on

$python3 test.py -h
usage: test.py [-h] [--verbosity VERBOSITY]

optional arguments:
  -h, --help            show this help message and exit
  --verbosity VERBOSITY
                        increase output verbosity

$python3 test.py --verbosity
usage: test.py [-h] [--verbosity VERBOSITY]
test.py: error: argument --verbosity: expected one argument

上面的一段程序用来展示一些东西,当–verbosity被确定时就会打印出信息,如果没有则什么也不显示,另外要有些需要修改的地方:1、程序的帮助信息有些歧义,2、verbosity只需要两个状态就可以工作了:Ture和False。
进行修改:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--verbosity", help="increase output verbosity",action="store_true")
args = parser.parse_args()
if args.verbosity:              ## 当不使用--verbosity时,该参数为None
    print("verbosity turned on")

输出:

$python3 test.py --verbosity
verbosity turned on

$python3 test.py --help
usage: test.py [-h] [--verbosity]

optional arguments:
  -h, --help   show this help message and exit
  --verbosity  increase output verbosity

修改后,这个选项更像一个标志而不是获取一个值了。注意我们加了一个新的关键字:action,然后给了它一个参数”store_true”。这样的话,当选项被确定的时候,args.verbose被确定为True。不使用选项则为False。
当然也可以使用短的选项参数:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-v","--verbose", help="increase output verbosity",action="store_true")
args = parser.parse_args()
if args.verbose:              ## 当不使用--verbosity时,该参数为None
    print("verbose turned on")

输出:

$python3 test.py -v
verbose turned on

将位置参数和可选参数进行结合:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square",type=int, help="disply a square of a given number")
parser.add_argument("-v","--verbose", help="increase output verbosity",action="store_true")
args = parser.parse_args()
answer = args.square ** 2
if args.verbose: 
    print("the square of {} equals {}".format(args.square, answer))
else:
    print(answer)

输出:

$python test.py 
usage: test.py [-h] [-v] square
test.py: error: the following arguments are required: square

$python test.py 4
16 

$python test.py 4 --verbose
the square of 4 equals 16

$python test.py --verbose 4
the square of 4 equals 16

上面程序中重新加上了位置参数,如果使用时不明确使用位置参数则会出现错误。
下面则使用了多可选参数的设置:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square",type=int, help="disply a square of a given number")
parser.add_argument("-v","--verbose",type=int, help="increase output verbosity")
args = parser.parse_args()
answer = args.square ** 2
if args.verbose ==2: 
    print("the square of {} equals {}".format(args.square, answer))
elif args.verbose == 1:
    print("{}^2 == {}".format(args.square, answer))
else:
    print(answer)

输出:

$python3 test.py 4
16

$python3 test.py 4 -v
usage: test.py [-h] [-v VERBOSE] square
test.py: error: argument -v/--verbose: expected one argument

$python3 test.py 4 -v 1
4^2 == 16

$python3 test.py 4 -v 2
the square of 4 equals 16

$python3 test.py 4 -v 3
16

上面输出中最后一行有点小问题,修改一下:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square",type=int, help="disply a square of a given number")
parser.add_argument("-v","--verbose",type=int,choices=[0, 1, 2], help="increase output verbosity")
args = parser.parse_args()
answer = args.square ** 2
if args.verbose ==2: 
    print("the square of {} equals {}".format(args.square, answer))
elif args.verbose == 1:
    print("{}^2 == {}".format(args.square, answer))
else:
    print(answer)

输出:

$python3 test.py 4 -v 3
usage: test.py [-h] [-v {0,1,2}] square
test.py: error: argument -v/--verbose: invalid choice: 3 (choose from 0, 1, 2)

$python3 test.py 4 -h
usage: test.py [-h] [-v {0,1,2}] square

positional arguments:
  square                disply a square of a given number

optional arguments:
  -h, --help            show this help message and exit
  -v {0,1,2}, --verbose {0,1,2}
                        increase output verbosity
Transformer发轫于NLP(自然语言处理),并跨界应用到CV(计算机视觉)领域。 Swin Transformer是基于Transformer的计算机视觉骨干网,在图像分类、目标检测、实例分割、语义分割等多项下游CV应用中取得了SOTA的性能。该项工作也获得了ICCV 2021顶会最佳论文奖。 本课程将手把手地教大家使用labelImg标注和使用Swin Transformer训练自己的数据集。  本课程将介绍Transformer及在CV领域的应用、Swin Transformer的原理。 课程以多目标检测(足球和梅西同时检测)为例进行Swin Transformer实战演示。 课程在Windows和Ubuntu系统上分别做项目演示。包括:安装软件环境、安装Pytorch、安装Swin-Transformer-Object-Detection、标注自己的数据集、准备自己的数据集(自动划分训练集和验证集)、数据集格式转换(Python脚本完成)、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计、日志分析。  相关课程: 《Transformer原理与代码精讲(PyTorch)》https://edu.csdn.net/course/detail/36697《Transformer原理与代码精讲(TensorFlow)》https://edu.csdn.net/course/detail/36699《ViT(Vision Transformer)原理与代码精讲》https://edu.csdn.net/course/detail/36719《DETR原理与代码精讲》https://edu.csdn.net/course/detail/36768《Swin Transformer实战目标检测:训练自己的数据集》https://edu.csdn.net/course/detail/36585《Swin Transformer实战实例分割:训练自己的数据集》https://edu.csdn.net/course/detail/36586《Swin Transformer原理与代码精讲》 https://download.csdn.net/course/detail/37045
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值