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 batmanandmyScript --user-name=batmanは を出力しますNamespace(user_name='admin')。
最初の行で名前user-nameをに変更しようとしましたが、プログラムの実行方法によっては、名前空間またはエラーの両方が発生することがありました。user_nameadd_argumentbatmanadmin
2行目の名前user_nameをに変更しようとしましたが、プログラムの実行方法に応じて、またはのいずれかが出力されます。user-nameadd_argumentNamespace(user-name='batman', user_name='admin')Namespace(user-name='admin', user_name='batman')