python参数解析
如果您正在使用Python进行大量开发,那么即使只是启动Python脚本或使用pip安装Python模块,您也可能已经在终端中发出了命令。 命令可能很简单也很单数:
$ ls
命令也可能带有一个参数:
$ ls example
命令还可以具有选项或标志:
$ ls --color example
有时选项也有参数:
$ sudo firewall-cmd --list-all --zone home
争论
POSIX Shell会自动将您作为命令键入的任何内容拆分为一个数组。 例如,这是一个简单的命令:
$ ls example
命令ls在位置$ 0 ,参数示例在位置$ 1 。
您可以编写一个循环来遍历每个项目。 确定是命令,选项还是参数; 并采取相应措施。 幸运的是,已经有一个名为argparse的模块。
精氨酸
argparse模块易于集成到您的Python程序中,并具有一些便利功能。 例如,如果您的用户更改了选项的顺序或使用了一个不带任何参数的选项(称为Boolean ,这意味着该选项将设置切换为开或关),然后又需要一个带参数的选项(例如--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是一个任意名称,没有特殊含义;它只是一个数据对象,其中包含该函数已解析的所有参数的摘要)。
默认情况下,Python会将用户给出的任何参数视为字符串。 如果需要摄取一个整数(一个数字),则必须指定一个选项期望type = int ,如示例代码中的--number选项所示。
如果您有一个仅打开或关闭功能的参数,则必须使用布尔类型,如示例代码中的--verbose标志一样。 这种类型的选项仅存储True或False ,指定用户是否使用了该标志。 如果使用该选项,则将激活stored_true 。
一旦运行getOptions函数,就可以使用options对象的内容,并使程序根据用户如何调用命令来做出决定。 您可以通过测试打印语句查看选项的内容。 将其添加到示例文件的底部:
print ( getOptions ( ) )
然后使用一些参数运行代码:
$ python3 .
/ example.py
-i foo
-n
4
Namespace
(
input =
'foo' ,
number =
4 ,
output =None,
verbose =False
)
检索值
示例代码中的options对象包含以long选项命名的键中用户提供的任何值(或派生的布尔值)。 例如,在示例代码中,可以通过查看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
)
# Insert Useful Python Code Here...
布尔选项,在本例中--verbose,通过测试options.verbose是否为真(即用户没有使用--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应用程序中的参数解析以及如何快速有效地记录其语法。 下次您编写快速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
)
翻译自: https://opensource.com/article/19/7/parse-arguments-python
python参数解析