您的位置:首页 > 编程语言 > Python开发

python命令行参数

2015-08-07 11:07 477 查看
〇、python中对应的argc, argv
需要模块:sys
参数个数:len(sys.argv)
脚本名: sys.argv[0]
参数1: sys.argv[1]
参数2: sys.argv[2]

一、getopt

opts,args = getopt.getopt ( [命令行参数列表], "短选项", [长选项列表] ) ,第三个参数可省略
短选项名后的冒号(:)表示该选项必须有附加的参数。如果没有:,-abc等价于-a -b -c;如果a有:,-abc等价于-a bc。
长选项名后的等号(=)表示该选项必须有附加的参数。
返回opts和args。
opts是一个参数选项及其value的元组[('-o', 'value'),('--option',''),...],opts可有重复项
args是一个除去有用参数外其他的命令行输入 [ 'a1', 'a2',... ]

import getopt, sys

def main():
try:
opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
except getopt.GetoptError as err:
# print help information and exit:
print str(err) # will print something like "option -a not recognized"
usage()
sys.exit(2)
output = None
verbose = False
for o, a in opts:
if o == "-v":
verbose = True
elif o in ("-h", "--help"):
usage()
sys.exit()
elif o in ("-o", "--output"):
output = a
else:
assert False, "unhandled option"
# ...

if __name__ == "__main__":
main()


二、argparse

参数输入错误时,自动生成help。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int, help="display a square of a given number")
# type=int,可省略,缺省str
parser.add_argument("-v", "--verbosity", action="store_true",help="increase output verbosity")
#action="store_true",不需要参数值
#parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2],help="increase output verbosity")
#type,choice可省
#parser.add_argument("-v", "--verbosity", action="count", default=0,help="increase output verbosity")
#不需要参数值,default可省
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
print "the square of {} equals {}".format(args.square, answer)
elif args.verbosity == 1:
print "{}^2 == {}".format(args.square, answer)
else:
print answer


互斥参数选项

import argparse

parser = argparse.ArgumentParser(description="calculate X to the power of Y")
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
args = parser.parse_args()
answer = args.x**args.y

if args.quiet:
print answer
elif args.verbose:
print "{} to the power {} equals {}".format(args.x, args.y, answer)
else:
print "{}^{} == {}".format(args.x, args.y, answer)


不定数量参数

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')

args = parser.parse_args()
#calling parse_args() will return an object with two attributes, integers and
#accumulate. The integers attribute will be a list of one or more ints, and the
#accumulate attribute will be either the sum() function, if --sum was specified
#at the command line, or the max() function if it was not.

print args.accumulate(args.integers)


parser.parse_args(['--sum', '7', '-1', '42'])
也可直接加参数

三、optparse

2.7开始废弃

四、docopt

非标准库,根据文档生成

try.docopt.org

"""Naval Fate.

Usage:

naval_fate.py ship new <name>...

naval_fate.py ship <name> move <x> <y> [--speed=<kn>]

naval_fate.py ship shoot <x> <y>

naval_fate.py mine (set|remove) <x> <y> [--moored | --drifting]

naval_fate.py (-h | --help)

naval_fate.py --version

Options:

-h --help     Show this screen.

--version     Show version.

--speed=<kn>  Speed in knots [default: 10].

--moored      Moored (anchored) mine.

--drifting    Drifting mine.

"""
from docopt import docopt

if __name__ == '__main__':
arguments = docopt(__doc__, version='Naval Fate 2.0')
print(arguments)

#返回
{'--drifting': False,    'mine': False,
'--help': False,        'move': True,
'--moored': False,      'new': False,
'--speed': '15',        'remove': False,
'--version': False,     'set': False,
'<name>': ['Guardian'], 'ship': True,
'<x>': '100',           'shoot': False,
'<y>': '150'}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: