所以我有这个程序,它接受零个或多个可选参数。然而,有一个必须通过的强制性论证(区域)。我有一个'if'条件,当没有检测到任何选项时,它将强制arg设置为sys.argv [1],当检测到一个或多个选项时,设置为sys.argv [-1](最后一个arg)。问题是,当传递选项并且未通过强制arg时,它不会抛出错误。 getopt中有没有办法接受一个没有任何选项的强制arg。
./ prog.py region - >工作正常
./ prog.py -c 4 -s 2 region - >工作正常
./ prog.py -c 4 -s 2 - >将region设置为2,这是不希望的,应该抛出错误
任何建议表示赞赏。
答案 0 :(得分:1)
getopt
会返回未解析的参数;检查该列表中的强制参数,而不是您提供的原始参数。
import getopt
for cmdline in ['region', '-c 4 -s 2 region', '-c 4 -s 2']:
print('Given: %s' % cmdline)
args = cmdline.split()
optlist, args = getopt.getopt(args, 'c:s:')
print(' Args: %s' % optlist)
print(' Remaining: %s' % args)
给出:
Given: region
Args: []
Remaining: ['region']
Given: -c 4 -s 2 region
Args: [('-c', '4'), ('-s', '2')]
Remaining: ['region']
Given: -c 4 -s 2
Args: [('-c', '4'), ('-s', '2')]
Remaining: []