📜  Python|如何解析命令行选项

📅  最后修改于: 2022-05-13 01:55:51.720000             🧑  作者: Mango

Python|如何解析命令行选项

在本文中,我们将讨论如何编写Python程序来解析命令行上提供的选项(位于sys.argv中)。 argparse 模块可用于解析命令行选项。

代码 #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模块是标准库中最大的模块之一,具有大量的配置选项。上面的代码显示了一个基本的子集,可以使用和扩展以开始使用。
  • 要解析选项,首先创建一个ArgumentParser实例并使用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')

以下参数规范允许参数重复多次,并且所有值都附加到列表中。 required 标志意味着必须至少提供一次参数。