python3命令行选项_13.3 解析命令行选项

问题

You want to write a program that parses options supplied on the command line (foundin sys.argv).

解决方案

The argparse module can be used to parse command-line options. A simple examplewill help to illustrate the essential features:

search.py‘""Hypothetical command-line tool for searching a collection offiles for one or more text patterns.‘""import argparseparser = 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()

Output the collected argumentsprint(args.filenames)print(args.patterns)print(args.verbose)print(args.outfile)print(args.speed)

This program defines a command-line parser with the following usage:

bash % python3 search.py -husage: search.py [-h] [-p pattern] [-v] [-o OUTFILE] [–speed {slow,fast}]

[filename [filename ...]]

Search some files

positional arguments:filenameoptional arguments:-h, --helpshow this help message and exit

-p pattern, --pat pattern

text pattern to search for

-vverbose mode

-o OUTFILEoutput file

–speed {slow,fast} search speed

The following session shows how data shows up in the program. Carefully observe theoutput of the print() statements.

bash % python3 search.py foo.txt bar.txtusage: 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.txtfilenames = [‘foo.txt", ‘bar.txt"]patterns = [‘spam", ‘eggs"]verbose = Trueoutfile = Nonespeed = slow

bash % python3 search.py -v -p spam –pat=eggs foo.txt bar.txt -o resultsfilenames = [‘foo.txt", ‘bar.txt"]patterns = [‘spam", ‘eggs"]verbose = Trueoutfile = resultsspeed = 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 = Trueoutfile = resultsspeed = fast

Further processing of the options is up to the program. Replace the print() functionswith something more interesting.

讨论

The argparse module is one of the largest modules in the standard library, and has ahuge number of configuration options. This recipe shows an essential subset that canbe used and extended to get started.To parse options, you first create an ArgumentParser instance and add declarations forthe options you want to support it using the add_argument() method. In each add_argument() call, the dest argument specifies the name of an attribute where the result ofparsing will be placed. The metavar argument is used when generating help messages.The action argument specifies the processing associated with the argument and is oftenstore for storing a value or append for collecting multiple argument values into a list.The following argument collects all of the extra command-line arguments into a list. It’sbeing used to make a list of filenames in the example:

parser.add_argument(dest="filenames",metavar="filename", nargs="*")

The following argument sets a Boolean flag depending on whether or not the argumentwas provided:

parser.add_argument(‘-v", dest="verbose", action="store_true",help="verbose mode")

The following argument takes a single value and stores it as a string:

parser.add_argument(‘-o", dest="outfile", action="store",help="output file")

The following argument specification allows an argument to be repeated multiple timesand all of the values append into a list. The required flag means that the argument mustbe supplied at least once. The use of -p and –pat mean that either argument name isacceptable.

parser.add_argument(‘-p", ‘–pat",metavar="pattern", required=True,dest="patterns", action="append",help="text pattern to search for")

Finally, the following argument specification takes a value, but checks it against a set ofpossible choices.

parser.add_argument(‘–speed", dest="speed", action="store",choices={‘slow","fast"}, default="slow",help="search speed")

Once the options have been given, you simply execute the parser.parse() method.This will process the sys.argv value and return an instance with the results. The results

for each argument are placed into an attribute with the name given in the dest parameterto add_argument().There are several other approaches for parsing command-line options. For example,you might be inclined to manually process sys.argv yourself or use the getopt module(which is modeled after a similarly named C library). However, if you take this approach,you’ll simply end up replicating much of the code that argparse already provides. Youmay also encounter code that uses the optparse library to parse options. Althoughoptparse is very similar to argparse, the latter is more modern and should be preferredin new projects.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值