1

所以我有这个程序,它接受零个或多个可选参数。然而,有一个必须始终传递的参数(区域)。我有一个“if”条件,当没有检测到选项时将强制参数设置为 sys.argv[1],当检测到一个或多个选项时将强制参数设置为 sys.argv[-1](最后一个参数)。The problem is it'll not throw an error when options are passed and the compulsory arg is not passed. getopt 中是否有一种方法可以接受没有任何选项的强制 arg。

./prog.py 区域 -> 工作正常

./prog.py -c 4 -s 2 region -> 工作正常

./prog.py -c 4 -s 2 -> 将区域设置为 2,这是不需要的,应该抛出错误

任何建议表示赞赏。

4

1 回答 1

2

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: []
于 2013-09-07T06:15:13.080 回答