Python 处理选项和参数

Python handling options and args

我写了 python 代码,我想处理开关和参数。所以我想告诉脚本:

如果您看到 -u,则参数 print "sth":

中没有 -d <name>
if sys.argv=='-u' and sys.argv!='-d':
    print "You must use the -d switch!"
    sys.exit()

看来这是错误的方法

sys.argv 是一个 list 所以你必须测试成员资格:

if '-u' in sys.argv and '-d' not in sys.argv:

但是,您最好使用 argparse library 来为您处理命令行界面。它不会直接处理相互依赖关系,但很容易扩展使用并通过帮助消息退出:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-u", action='store_true')
parser.add_argument("-d")
args = parser.parse_args()

if args.u and not args.d:
    parser.error('You must use the -d switch when setting -u!')

演示:

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument("-u", action='store_true')
_StoreTrueAction(option_strings=['-u'], dest='u', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument("-d")
_StoreAction(option_strings=['-d'], dest='d', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> args = parser.parse_args(['-u'])
>>> args.u
True
>>> args.d
>>> args.u and not args.d
True
>>> args = parser.parse_args(['-u', '-d', 'foo'])
>>> args.d
'foo'
>>> args.u and not args.d
False

检查 u 是否在列表 sys.argv 中,-d 是否在 中列表 sys.argv:

if '-u'  in  sys.argv and '-d'  not in sys.argv:
    print "You must use the -d switch!"
    sys.exit()