1

私は Python が初めてで、getopt から学んだことは、Python スクリプトの実行中にコマンド ライン引数を渡すことができるということです。私の質問は、コマンドラインで渡すことができる引数の数を設定しない方法はありますか?

私のコードは次のようになります。

try:
     opts, args = getopt.getopt(sys.argv[1:],"h:1:2:3:4:",["help=", "1week=","2week=", "3week=", "4week="])
except getopt.GetoptError:
     print 'test.py -1 <week 1> -2 <week 2> -3 <week 3> -4 <week 4>'
     sys.exit(2)
for opt, arg in opts:
     if opt == '-h':
          print 'test.py -1 <week 1> -2 <week 2> -3 <week 3> -4 <week 4>'
          sys.exit()
     elif opt in ("-1", "--1week"):
          week1 = arg
     elif opt in ("-2", "--2week"):
          week2 = arg
     elif opt in ("-3", "--3week"):
          week3 = arg
     elif opt in ("-4", "--4week"):
          week4 = arg

上記のコードを実行するには、 を使用します python test.py -1 89 -2 88 -3 87 -4 86。とにかく、これを変更して、常に4つの引数だけでなく3つの引数を与える必要がない場所はありますか? 場合によっては 3 つまたは 4 つの引数を与えることもある柔軟なものにしたいと考えています。

4

2 に答える 2

2

プログラムが 1 つ以上の週番号を受け入れる場合:

from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument('weeks', nargs='+', type=int, help='weeks numbers')
args = parser.parse_args()
print(args)

$ python your_script.py 1 2 3

出力

Namespace(weeks=[1, 2, 3])

'weekly_1_2_3'上記から生成するにはargs.weeks

result = 'weekly_' + '_'.join(map(str, args.weeks))

結果はコマンドライン'weekly_1_2_3_4'用です。1 2 3 4

于 2012-10-17T18:00:42.820 に答える
0

argparse代わりに (python 2.7)を使用してください。デフォルトでは、すべてのオプションはオプションと見なされます。「必須オプション」argparseの属性が含まれています。required

例えば:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--firstname', dest='fn', required=True)
parser.add_argument('--greeting', dest='grt', nargs='?', choices=['hello', 'goodbye'], default='hello')
parser.add_argument('--repeat', dest='rpt', nargs='?', default=1, type=int)
args = parser.parse_args()

for n in range(args.rpt):
    print "%d: %s, %s" % (n+1, args.grt, args.fn)
于 2012-10-17T17:38:31.340 に答える