python代入命令_如何将命令行参数传入Python脚本?

首先当然是导入argparse库,然后创建一个ArgumentParser()对象:

import argparse

parse = argparse.ArgumentParser()

接着我们来添加要输入的变量,然后完成解析,再将输入的变量乘以2打印出来:

parse.add_argument("number")

args = parse.parse_args()

print(args.number * 2)

将这段代码保存为ex1.py,来运行一下看是什么样子。当我们在命令行中输入python ex1.py不带参数时,看看会发生什么:

λ python ex1.py

usage: ex1.py [-h] number

ex1.py: error: the following arguments are required: number

程序报错,提示需要带一个名叫number的参数。我们将其添加上再来运行一下,看看怎样:

λ python ex1.py 5

55

结果出来了,好消息是程序没有报错,可是输出的结果却并非我们想要的,因为我们最开始的目标是将输入的数乘以2输出,即输入5,要输出10才对,可是却输出了55,这是怎么回事呢?

原来是因为在程序中,我们并没有为输入的参数指定数据类型,这样默认情形下就将其当作字符串接收了,因此,在乘以2时,执行的是字符串的乘法命令。

为了达到我们的目的,需要在程序中为输入参数指定数据类型,修改程序如下:

import argparse

parse = argparse.ArgumentParser()

parse.add_argument("number", type=int)

args = parse.parse_args()

print(args.number * 2)

然后再来执行一下:

λ python ex1.py 5

10

这一次就执行成功能了,对比两次程序,我们发现只有一行代码发生了改变,就是在ArgumentParser解析器中添加参数时加入type=int即可,这样就自动将输入的参数转化为int类型,当然如果输入的是无法转换成整数的字符串,同样会报错,比如:

λ python ex1.py hello

usage: ex1.py [-h] number

ex1.py: error: argument number: invalid int value: 'hello'

为脚本增加可选参数

上面的程序中,我们可以接受一个数字作为参数,那么增加一个可选参数时该如何处理呢?假若我们想有这样一个功能,当输入两个数作为参数时,程序来打印两数之积,如果只有一个数字输入时,就输出这个数字的2倍,这样的功能应该如何实现?下面我们来进一步修正代码:

import argparse

parse = argparse.ArgumentParser()

parse.add_argument("num1", type=int)

parse.add_argument("--num2", type=int, dest="num2")

args = parse.parse_args()

if args.num2:

print(args.num1 * args.num2)

else:

print(args.num1 * 2)

我们注意到,在增加num2时,参数提示符前加了–字样,这指的是该参数为可选参数,同时在其后附加了一个dest参数,它的功能是将输入的参数转换为程序内部的变量名称,而–num2则是外部调用时却要指定的字符样式,它的调用是这样的:

λ python ex1.py 10 --num2 3

30

如果只带一个参数时,调用与原来的没有区别:

λ python ex1.py 10

20

当输入变量出错时,命令窗口会提示出错,同时会将该脚本的用法打印出来:

λ ex1.py 10 3

usage: ex1.py [-h] [--num2 NUM2] num1

ex1.py: error: unrecognized arguments: 3

熟悉命令窗口参数的同学一下子就会看到熟悉的[]可选参数框。

一些小技巧

到目前为止,我们已经知道了如何利用argparse来实现命令行窗口参数解析的方法,但是还有一些小技巧需要注意一下:

1、可选参数为开关变量

有时候我们所编写的脚本程序中,可选参数只是一个开关变量,即当附带该可选参数时,程序输出是一个结果,不带该参数时,输出另一个结果,这个时候当然也可以用上述的方式通过给出可选参数某一个值来判定,比如输入一个字符串,可选参数的功能是大小写转换,这时用上述我们介绍的方法可以这样来实现:

import argparse

parse = argparse.ArgumentParser()

parse.add_argument('greeting')

parse.add_argument("--caps", dest="caps")

args = parse.parse_args()

if args.caps:

print(args.greeting.upper())

else:

print(args.greeting)

这样的程序调用时,只要给–caps后面附带任何字符,都可以将输入的字符串转换成大写:

λ python ex1.py hello --caps 1

HELLO

但这样看起来不优雅,其实在argparse库中,在附加可选参数时,可以用一行action=”store_true”代码来标记该参数为开关变量,这样上述代码就可改写如下:

import argparse

parse = argparse.ArgumentParser()

parse.add_argument('greeting')

parse.add_argument("--caps", action="store_true")

args = parse.parse_args()

if args.caps:

print(args.greeting.upper())

else:

print(args.greeting)

注意观察上述代码,实际上只有一行进行了修正,这样一来,在命令行调用时,就可以显得很简洁,如:

λ python ex1.py hello --caps

HELLO

脚本包含帮助文档

我们所编写的脚本肯定是要实现特定功能的,为了更好给别人使用或时间久了以免自己忘记,最好增加一些帮助文档,来说明该脚本的功能及使用方法,这样在命令窗口调用该脚本时,只要在其后加上–help,即可输出其文档信息,比如:

import argparse

parse = argparse.ArgumentParser()

parse.add_argument('greeting', help="这段文本可以被打印")

parse.add_argument("--caps", help="该标志可以将小写字母转换成大写", action="store_true")

args = parse.parse_args()

if args.caps:

print(args.greeting.upper())

else:

print(args.greeting)

添加了help参数后,在命令行的调用如下:

λ python ex1.py --help

usage: ex1.py [-h] [--caps] greeting

positional arguments:

greeting 这段文本可以被打印

optional arguments:

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

--caps 该标志可以将小写字母转换成大写

这样的帮助信息可以让我们对该脚本的功能一目了然。

为参数设置一个短提示

在上述可转换字符串大写的脚本中,参数–caps显得有些长,如果这样的可选参数比较多,一行命令写下来就显得很啰嗦,为了解决这个问题,可以用较短的字母,比如用–c来表示–caps,这样写起来会显得简洁,此时只需要将可选参数的一行代码修正如下:

parse.add_argument("-c", "--caps", help="该标志可以将小写字母转换成大写", action="store_true")

帮助文档及调用如下:

λ python ex1.py --help

usage: ex1.py [-h] [-c] greeting

positional arguments:

greeting 这段文本可以被打印

optional arguments:

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

-c, --caps 该标志可以将小写字母转换成大写

---------------------------------------

λ python ex1.py hello -c

HELLO

小结

本文对Python中的argparse库进行了介绍,编写脚本程序是帮助我们进行工作学习自动化的必备技能,希望大家能熟悉掌握这个解析参数的标准库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值