2016-08-17 3 views
0

PythonでArgparseを使用してコマンドラインでスクリプトを実行しています。私は私のスクリプトのためにこれを持っている:私はコールした場合manageAdamはそれがうまくいくと位置引数を要求していない-sことを探していますPythonでargparseを使用して他のパラメータの必要性を抑えるパラメータを追加する方法はありますか?

parser = argparse.ArgumentParser(prog = 'manageAdam') 
parser.add_argument("-s", action='store_true', default=False, help='Shows configuration file') 

parser.add_argument("d", type=str, help="device") 
parser.add_argument("o", type=str, help="operation") 
parser.add_argument("-v", "--value", type=int, nargs='*', help="value or list to send in the operation") 

、他のどのなしで呼び出すことができます-h、のようなもの定義された位置引数。出来ますか?

+0

'-h'には特別なActionクラスがあり、ヘルプを出力してからシステムを終了します。それが他のパラメータをブロックする方法です。特定のアクションからパーサを終了するだけのきれいな方法はありません。 – hpaulj

答えて

1

これを行うための組み込み方法はありません。 あなたの状態についてのパーサーを追跡するカスタムのActionクラスを書くことによって何かを達成することができるかもしれませんが、それは非常に面倒でバグになると思います。

私は、あなたのUIを改善するのが最善の策だと考えています。 -sではなく、です。これは、スクリプトの実行方法を完全に変更する別のコマンドです。このような場合は、サブコマンドを導入できるようにする機能を使用してください。subparsersこれは、あなたが思ったインターフェースより優れたインターフェースであり、他の多くのツール(Git/mercurialなど)で使用されています。この場合

あなたが設定とを処理するため configコマンドを持っていると思います run(またはあなたがそれを呼びたいか)デバイス上で操作を実行するためのコマンドを:

subparsers = parser.add_subparsers(dest='command') 
parser_config = subparsers.add_parser('config', help='Configuration') 
parser_run = subparsers.add_parser('run', help='Execute operation on device') 

parser_run.add_argument('d', type=str, ...) 
parser_run.add_argument('o', type=str, ...) 
parser_run.add_argument('-v', type=int, nargs='*', ...) 

# later: 

args = parser.parse_args() 
if args.command == 'config': 
    print('Configuration') 
else: 
    print('Run operation') 

コマンドから使用されます

$ manageAdam config 
# or 
$ manageAdam run <device> <operation> <values...> 
+0

サブパーザーが私のスクリプトをより直観的に構築すると思うので、私はこのソリューションを使用しています。しかし、他の誰かが他のやり方をする必要がある場合は、nargs = '?'オプションは、位置引数を必須ではないようにするので、argsを解析した後でさらに検査することで行うことができます。助けてくれてありがとう! – Aday88

0

いいえ、そんなことはありません。

あなたはmanageAdamは、他の引数のためのスキップのチェックを提供する場合はそうでない場合は、argparse.ArgumentErrorを調達し、それらのすべてがNoneないことを確認を行うすべての引数はオプションとNoneにデフォルト値を設定することができます。

関連する問題