argparse
モジュールを使用してコマンドライン オプションを解析する Python プログラムを作成しようとしています。
名前付きまたは位置指定可能なオプションの引数を作成したいと考えています。たとえば、myScript --username=batman
と同じことをしたいmyScript batman
。またmyScript
、ユーザー名なしで有効にしたいです。これは可能ですか?もしそうなら、どうすればそれを行うことができますか?
以下のコードに似たさまざまなことを試しましたが、成功しませんでした。
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-u", "--user-name", default="admin")
group.add_argument("user-name", default="admin")
args = parser.parse_args()
編集:上記のコードは、という例外をスローしますValueError: mutually exclusive arguments must be optional
。
OS X 10.8.4 で Python 2.7.2 を使用しています。
編集:ガブリエル・ヤコブソンの提案を試しましたが、すべての場合に正しく機能させることができませんでした。
私はこれを試しました:
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-u", "--user-name", default="admin", nargs="?")
group.add_argument("user_name", default="admin", nargs="?")
args = parser.parse_args()
print(args)
and runningmyScript batman
は を出力しますNamespace(user_name='batman')
が、myScript -u batman
andmyScript --user-name=batman
は を出力しますNamespace(user_name='admin')
。
最初の行で名前user-name
をに変更しようとしましたが、プログラムの実行方法によっては、名前空間またはエラーの両方が発生することがありました。user_name
add_argument
batman
admin
2行目の名前user_name
をに変更しようとしましたが、プログラムの実行方法に応じて、またはのいずれかが出力されます。user-name
add_argument
Namespace(user-name='batman', user_name='admin')
Namespace(user-name='admin', user_name='batman')