2017-08-17 28 views
0

私は2つのコマンドを定義しました(質問に答えるために必要と思わないので、簡潔にするためにパーサー/サブパネルのセクションを省略しました)。Python argparseコマンドとコマンド引数を組み合わせる

#COMMAND ARGS: Add Arguments to the final command "sacs am run [args]" 
am_run_parser.add_argument("-s", action='store_const', const='s', dest='s', help="Output statistical reporting to the console.") 
am_run_parser.add_argument("-S", action='store_const', const='S', dest='S', help="Output statistical reporting to the standard archive.") 
am_run_parser.add_argument("-t", action='store_const', const='t', dest='t', help="Output timing reporting to the console.") 
am_run_parser.add_argument("-T", action='store_const', const='T', dest='T', help="Output timing reporting to the standard archive.") 
am_run_parser.add_argument("-R", action='store_const', const='R', dest='R', help="Output reject reporting to the standard archive.") 
am_run_parser.add_argument("-b", "--bulk", type=int, nargs=1, help="MySQL Bulk Insert Quantity. Currently the default is set at " + str(defaults.bulk) + ". Theoretically, changing this value can affect how quickly inserts are performed.") 
am_run_parser.add_argument("-host", nargs=1, help="The MySQL server host to output to.") 
am_run_parser.add_argument("-port", nargs=1, help="The MySQL server port to output to.") 
am_run_parser.add_argument("-user", nargs=1, help="The MySQL server username to use.") 
am_run_parser.add_argument("-pw", nargs=1, help="The MySQL server password to use.") 
am_run_parser.add_argument("-db", nargs=1, help="The MySQL server database to use.") 
am_run_parser.set_defaults(func=am_cli_tools.am_run) 

#COMMAND ARGS: Add Arguments to the final command "sacs am get [args]" 
am_get_parser.add_argument("-a", action='store_const', const='a', dest='a', help="Get source A data for sacs am processing.") 
am_get_parser.add_argument("-b", action='store_const', const='b', dest='b', help="Get source B data for sacs am processing.") 
am_get_parser.add_argument("-c", action='store_const', const='c', dest='c', help="Get source C data for sacs am processing.") 
am_get_parser.add_argument("-r", action='store_const', const='r', dest='r', help="Get source D data for sacs am processing.") 
am_get_parser.add_argument("-t", action='store_const', const='t', dest='t', help="Get source E data for sacs am processing.") 
am_get_parser.add_argument("-R", action='store_const', const='t', dest='t', help="Run the sacs am processor using the arguments specified after the run_args flag. This will perform the 'sacs am run' command after all specified sources are gathered (review the help file for this command for additional information about argument options).") 
am_get_parser.set_defaults(func=am_cli_tools.am_get) 

ご覧のとおり、-sオプションをsacs am getコマンドに追加しています。基本的に、私は嚢が遂行した後に嚢を走らせることを告げることができるようにしたいと思っています。例えばsacsは取得します-abcrt R -run_args -sStTRb -host www.google.com -port 22 -user IBUser -pw IBpass -db IBpoken(lol)。

もちろん、これらのrun_argsは-R引数でのみ適用できます。

私はこれに接近するより良い方法があると思います。すべてのオプションはテーブルにあります。これらのコマンドは実行時に電子メールを送信する必要があります(多くの場合、cronジョブ経由で)。これは、コマンドを組み合わせるオプションが必要な主な理由の1つです。コマンドを別々に実行する必要があるため、1つではなく2つの電子メールを送信する必要があるためです。私は書き込み/ファイルに追加してcronを実行するsendemailコマンドを別に作成するような何かを行うことができると思いますが、このアプローチは物事をより秩序あるかつ簡潔に保ちます。

+0

第3のコマンド 'sacs am full'は、' get'と 'run'の両方の引数をすべて持ちますか?繰り返しを避けるために、辞書のすべての引数を整理し、ループ内の適切なパーサーに追加することができます。 –

+0

私はsacをgetrunに追加することを考えていましたが、関連する関数を持つだけでam_getとam_runを呼び出すことができました。また、オプションの電子メールを送信するために、元の2つのコマンドに-e引数を追加します。私がアプローチで見る唯一の実際の問題は、現在、いくつかの引数の重複があり、新しいコマンドの文字を変更する必要があり、ユーザーを混乱させる可能性があります。ファイルには、いくつかの実際の問題を引き起こす可能性があります...変数名は理想的です。 – gunslingor

+0

引数の重複が実際の問題を引き起こす可能性がある場合は、重複するバージョンの両方の名前を変更することで(例: '--get-x'という接頭辞を付けて)、避けるのは簡単です。間違った引数を使用するとエラーが発生し、誤ったパラメータで実行するリスクはありません。もちろん、ユーザーエクスペリエンスの問題は解決しませんが、常に新しいインターフェイスを使用します。 –

答えて

0

完全性を求めるのを止めて、ちょうど両方の電子メールを送信しましょう。

関連する問題