7

Pythonの(私が思うに)のドキュメントによるとgetopt、オプションフィールドはgetopt()関数として動作するはずです。ただし、コードでオプションのパラメーターを有効にできないようです。

#!/usr/bin/python
import sys,getopt

if __name__ == "__main__":
    try:
        opts, args = getopt.gnu_getopt(sys.argv[1:], "v::", ["verbose="])
    except getopt.GetoptError, err:
        print str(err)
        sys.exit(1)

    for o,a in opts:
        if o in ("-v", "--verbose"):
            if a:
                verbose=int(a)
            else:
                verbose=1
            print "verbosity is %d" % (verbose)

結果:

$ ./testopt.py -v
option -v requires argument
$ ./testopt.py -v 1
verbosity is 1
4

5 に答える 5

10

getoptオプションのパラメーターはサポートされていません。長いオプションの場合、次のことができます。

$ ./testopt.py --verbose=

これは空の文字列値になります。

argparseモジュールがより柔軟であることがわかります。

于 2009-10-07T16:36:27.693 に答える
6

残念ながら、方法はありません。optparseドキュメントから:

通常、特定のオプションは引数を取るか、または取りません。多くの人が「オプションのオプション引数」機能を望んでいます。つまり、一部のオプションは、表示された場合は引数を取り、見なかった場合は引数を取りません。これは、構文解析があいまいになるため、多少議論の余地があります。「-a」がオプションの引数を取り、「-b」が完全に別のオプションである場合、「-ab」をどのように解釈しますか?このあいまいさのため、optparseはこの機能をサポートしていません。

編集:おっと、それはgetoptモジュールではなくoptparseモジュールの場合ですが、どちらのモジュールにも「オプションのオプション引数」がない理由は両方とも同じです。

于 2009-10-07T16:40:54.047 に答える
3

次のように getopt でオプションのパラメーターを実行できます。

import getopt
import sys

longopts, shortopts = getopt.getopt(sys.argv[1:], shortopts='', longopts=['env='])
argDict = dict(longopts)

if argDict.has_key('--env') and argDict['--env'] == 'prod':
    print "production"
else:
    print "sandbox"

使用法:

$ python scratch.py --env=prod
production

$ python scratch.py --env=dev
sandbox

$ python scratch.py
sandbox
于 2011-12-16T00:16:04.577 に答える
0

バージョン2.3以降を使用している場合は、代わりにoptparseモジュールを試してみることをお勧めします。これは、「より便利で、柔軟性があり、強力です...」だけでなく、新しいためです。残念ながら、Pyntが答えたように、あなたが望むものを正確に得ることは不可能のようです。

于 2009-10-07T17:25:16.580 に答える
0

Python の getopt は、パラメーターを指定するときに「=」を使用することを要求する GNU getopt のように、オプションの引数を実際にサポートする必要があります。ただし、 --option を暗黙的に --option= に変更することで、この制約を使用して非常に簡単にシミュレートできます。

IE では、 --option に引数が必要であることを指定してから、次のように --option を --option= に調整できます。

for i, opt in enumerate(sys.argv):
    if opt == '--option':
        sys.argv[i] = '--option='
    elif opt == '--':
        break
于 2015-01-07T16:47:48.383 に答える