Python处理选项和args

时间:2015-01-31 11:51:58

标签: python arguments command-line-arguments options getopt

我编写了一个python代码,我想处理切换和参数。所以我想告诉脚本:

如果您看到-u,则参数-d <name>中没有print "sth"

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

似乎这是错误的方法

2 个答案:

答案 0 :(得分:3)

sys.argv列表,因此您必须测试会员资格:

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

答案 1 :(得分:1)

检查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()