Python |如何解析命令行选项
在本文中,我们将讨论如何编写一个 Python 程序来解析命令行中提供的选项(可在 sys.argv 中找到)。参数解析模块可用于解析命令行选项。
代码#1:使用 argparse 模块
'''
Hypothetical command-line tool for searching a
collection of files for one or more text patterns.
'''
import argparse
parser = argparse.ArgumentParser(description ='Search some files')
parser.add_argument(dest ='filenames', metavar ='filename', nargs ='*')
parser.add_argument('-p', '--pat', metavar ='pattern',
required = True, dest ='patterns',
action ='append',
help ='text pattern to search for')
parser.add_argument('-v', dest ='verbose',
action ='store_true', help ='verbose mode')
parser.add_argument('-o', dest ='outfile',
action ='store', help ='output file')
parser.add_argument('--speed', dest ='speed',
action ='store', choices = {'slow', 'fast'},
default ='slow', help ='search speed')
args = parser.parse_args()
上面提到的程序定义了一个命令行解析器,其用法如下
bash % python3 search.py -h
usage: search.py [-h] [-p pattern] [-v] [-o OUTFILE]
[--speed {slow, fast}] [filename [filename ...]]
Search some files
positional arguments:
filename
optional arguments:
-h, --help show this help message and exit
-p pattern, --pat pattern
text pattern to search for
-v verbose mode
-o OUTFILE output file
--speed {slow, fast} search speed
观察 print()语句的输出。
代码:下面的会话显示了数据是如何在程序中显示的。
bash % python3 search.py foo.txt bar.txt
usage: search.py [-h] -p pattern [-v] [-o OUTFILE]
[--speed {fast, slow}] [filename [filename ...]]
search.py: error: the following arguments are required: -p/--pat
bash % python3 search.py -v -p spam --pat = eggs
foo.txt bar.txt
filenames = ['foo.txt', 'bar.txt']
patterns = ['spam', 'eggs']
verbose = True
outfile = None
speed = slow
bash % python3 search.py -v -p spam --pat = eggs
foo.txt bar.txt -o results
filenames = ['foo.txt', 'bar.txt']
patterns = ['spam', 'eggs']
verbose = True
outfile = results
speed = slow
bash % python3 search.py -v -p spam --pat = eggs
foo.txt bar.txt -o results \--speed = fast
filenames = ['foo.txt', 'bar.txt']
patterns = ['spam', 'eggs']
verbose = True
outfile = results
speed = fast
- argparse 模块是标准库中最大的模块之一,有大量的配置选项。上面的代码显示了一个基本的子集,可以使用和扩展来开始。
- 要解析选项,首先创建一个参数解析器实例,并使用 add_argument ()方法为您想要支持的选项添加声明。
- 在每个 add_argument()调用中,dest 参数指定解析结果将放置的属性的名称。
- 生成帮助消息时使用 metavar 参数。
- action 参数指定与该参数相关联的处理,通常用于存储一个值,或者用于将多个参数值收集到一个列表中。
代码:参数将所有额外的命令行参数收集到一个列表中。它被用来制作文件名列表
parser.add_argument(dest = 'filenames',
metavar = 'filename', nargs = '*')
代码:参数根据是否提供了该参数来设置布尔标志
parser.add_argument('-v', dest = 'verbose',
action = 'store_true',
help = 'verbose mode')
代码:参数接受单个值并将其存储为字符串
parser.add_argument('-o', dest = 'outfile',
action = 'store', help = 'output file')
下面的参数规范允许一个参数重复多次,并且所有的值都追加到一个列表中。必需标志意味着该参数必须至少提供一次。
版权属于:月萌API www.moonapi.com,转载请注明出处