使用 argparse 模块像专业人士同样解析参数。python
若是你在使用 Python 进行开发,你可能会在终端中使用命令,即便只是为了启动 Python 脚本或使用 pip 安装 Python 模块。命令可能简单而单一:linux
$ ls
复制代码
命令也可能须要参数:git
$ ls example
复制代码
命令也能够有选项或标志:github
$ ls --color example
复制代码
有时选项也有参数:shell
$ sudo firewall-cmd --list-all --zone home
复制代码
POSIX shell 会自动将你输入的内容做为命令分红数组。例如,这是一个简单的命令:数组
$ ls example
复制代码
命令 ls
的位置是 $0
,参数 example
位置是 $1
。bash
你能够写一个循环迭代每项。肯定它是不是命令、选项仍是参数。并据此采起行动。幸运的是,已经有一个名为 argparse 的模块。ide
argparse 模块很容易集成到 Python 程序中,并有多种便利功能。例如,若是你的用户更改选项的顺序或使用一个不带参数的选项(称为布尔,意味着选项能够打开或关闭设置),而后另外一个须要参数(例如 --color red
),argparse 能够处理多种状况。若是你的用户忘记了所需的选项,那么 argparse 模块能够提供友好的错误消息。函数
要在应用中使用 argparse,首先要定义为用户提供的选项。你能够接受几种不一样的参数,而语法一致又简单。测试
这是一个简单的例子:
#!/usr/bin/env python
import argparse
import sys
def getOptions(args=sys.argv[1:]):
parser = argparse.ArgumentParser(description="Parses command.")
parser.add_argument("-i", "--input", help="Your input file.")
parser.add_argument("-o", "--output", help="Your destination output file.")
parser.add_argument("-n", "--number", type=int, help="A number.")
parser.add_argument("-v", "--verbose",dest='verbose',action='store_true', help="Verbose mode.")
options = parser.parse_args(args)
return options
复制代码
此示例代码建立一个名为 getOptions
的函数,并告诉 Python 查看每一个可能的参数,前面有一些可识别的字符串(例如 --input
或者 -i
)。 Python 找到的任何选项都将做为 options
对象从函数中返回(options
是一个任意名称,且没有特殊含义。它只是一个包含函数已解析的全部参数的摘要的数据对象)。
默认状况下,Python 将用户给出的任何参数视为字符串。若是须要提取整数(数字),则必须指定选项 type=int
,如示例代码中的 --number
选项。
若是你有一个只是关闭和打开功能的参数,那么你必须使用 boolean
类型,就像示例代码中的 --verbose
标志同样。这种选项只保存 True
或 False
,用户用来指定是否使用标志。若是使用该选项,那么会激活 stored_true
。
当 getOptions
函数运行时,你就可使用 options
对象的内容,并让程序根据用户调用命令的方式作出决定。你可使用测试打印语句查看 options
的内容。将其添加到示例文件的底部:
print(getOptions())
复制代码
而后带上参数运行代码:
$ python3 ./example.py -i foo -n 4
Namespace(input='foo', number=4, output=None, verbose=False)
复制代码
示例代码中的 options
对象包含了用户提供的选项后面的值(或派生的布尔值)。例如,在示例代码中,能够经过 options.number
来检索 --number
。
options = getOptions(sys.argv[1:])
if options.verbose:
print("Verbose mode on")
else:
print("Verbose mode off")
print(options.input)
print(options.output)
print(options.number)
# 这里插入你的 Python 代码
复制代码
示例中的布尔选项 --verbose
是经过测试 options.verbose
是否为 True
(意味着用户使用了 --verbose
标志)或 False
(用户没有使用 --verbose
标志),并采起相应的措施。
argparse 还包含一个内置的 --help
(简写 -h
)选项,它提供了有关如何使用命令的提示。这是从你的代码派生的,所以生成此帮助系统不须要额外的工做:
$ ./example.py --help
usage: example.py [-h] [-i INPUT] [-o OUTPUT] [-n NUMBER] [-v]
Parses command.
optional arguments:
-h, --help show this help message and exit
-i INPUT, --input INPUT
Your input file.
-o OUTPUT, --output OUTPUT
Your destination output file.
-n NUMBER, --number NUMBER
A number.
-v, --verbose Verbose mode.
复制代码
这是一个简单的示例,来演示如何在 Python 应用中的解析参数以及如何快速有效地记录它的语法。下次编写 Python 脚本时,请使用 argparse 为其提供一些选项。你之后会感到自得,你的命令不会像一个快速的临时脚本,更像是一个“真正的” Unix 命令!
如下是可用于测试的示例代码:
#!/usr/bin/env python3
# GNU All-Permissive License
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved. This file is offered as-is,
# without any warranty.
import argparse
import sys
def getOptions(args=sys.argv[1:]):
parser = argparse.ArgumentParser(description="Parses command.")
parser.add_argument("-i", "--input", help="Your input file.")
parser.add_argument("-o", "--output", help="Your destination output file.")
parser.add_argument("-n", "--number", type=int, help="A number.")
parser.add_argument("-v", "--verbose",dest='verbose',action='store_true', help="Verbose mode.")
options = parser.parse_args(args)
return options
options = getOptions(sys.argv[1:])
if options.verbose:
print("Verbose mode on")
else:
print("Verbose mode off")
print(options.input)
print(options.output)
print(options.number)
复制代码
via: opensource.com/article/19/…
做者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy