1

したがって、ゼロ個以上のオプションの引数を取るこのプログラムがあります。ただし、常に渡す必要がある必須の引数 (領域) が 1 つあります。オプションが検出されない場合は強制引数を sys.argv[1] に設定し、1 つ以上のオプションが検出された場合は sys.argv[-1] (最後の引数) に設定する「if」条件があります。問題は、オプションが渡され、必須の引数が渡されない場合にエラーがスローされないことです。オプションを持たない強制的な引数を受け入れる getopt の方法はありますか。

./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 に答える