1

getopt を使用して、長いオプションのみでコマンドライン引数から入力を取得したい

例:./script --empid 123

options, args = getopt.getopt(sys.argv[1:],['empid='])
    for opt, arg in options:
        print 'opts',opt
        if opt in ('--empid'):
            emp_Id = arg

getopt.GetoptError: option --empid not recognised上記のコードでエラーエラーが発生しています。何がうまくいかなかったのでしょうか?

4

2 に答える 2

6

のドキュメントを読んでいませんgetopt.getopt:

getopt.getopt(args, options[, long_options])

コマンド ライン オプションとパラメーター リストを解析します。[...]

long_optionsを指定する場合は、サポートする必要がある長いオプションの名前を含む文字列のリストにする必要があります。-- オプション名に先頭の文字を含めないでください。引数を必要とする長いオプションの後には、等号 ( =) を付ける必要があります。オプションの引数はサポートされていません。長いオプションのみを受け入れるに optionsは、空の文字列にする必要があります。

だからあなたがしなければならない:

options, args = getopt.getopt(sys.argv[1:], "", ['empid='])

のドキュメントから引用getopt

ノート

このgetoptモジュールは、コマンド ライン オプションのパーサーであり、その API は Cgetopt()関数のユーザーが使い慣れるように設計されています。Cgetopt()関数 に慣れていないユーザーや、より少ないコードを記述してより適切なヘルプとエラー メッセージを取得したいユーザーは、argparse代わりにモジュールの使用を検討する必要があります。

の使用例argparse:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--empid', type=int)
parser.add_argument('positionals', nargs='*')
args = parser.parse_args()
print(args.positionals, args.empid)

このモジュールは、より柔軟で高度であると同時に、より使いやすいですgetopt

于 2014-05-24T11:03:27.477 に答える
1

long_optionsの 3 番目のパラメータgetopt.getopt:

最初の行は次のようになります。

options, args = getopt.getopt(sys.argv[1:], '', ['empid='])
于 2014-05-24T11:02:26.267 に答える