問題タブ [argparse]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - argparseを使用して、-なしで別のコマンドラインの引数を収集する方法は?
私は次のような他のプログラムを実行するPythonプログラムを書いています:
ここで、fooとbarはmy-wrapper-programの引数でありgit commit --all
、実行したいサブコマンドです。--
常に特別な引数を指定せずに、argparseでこれを行うにはどうすればよいですか?(一般的なケースは最も単純なケースです:my-wrapper-program command
。)
(optparseを使用すると、を使用できますdisallow_interspersed_args=False
。)
python - 位置パラメータとオプションパラメータの順序が正しくありません
なぜこれらの引数をargparseで解析しないのですか?
使用する
これにより、次のエラーが発生します。
エラー:引数が少なすぎます
ただし、最初にbar引数を渡すと、次のように機能します。
さて、これ自体はそれほど悪くはありません。私は最初に位置引数を持って生きることができます。それは、この動作がargparseが作成するヘルプと矛盾しているということです。これは、バーが最後である必要があることを示しています。
使用法:argparsetest.py [-h] [--foo FOO[FOO...]]バー
では、一貫したヘルプテキストを使用してこれをどのように機能させるのでしょうか。
これが完全なテストプログラムです。
python - Python argparse と終了ステータス コードの制御/オーバーライド
ソースをいじる以外に、必要なスイッチがないなど、呼び出されargparse
たときに問題が発生した場合に、終了ステータス コードを制御する方法はありますか?parse_args()
python - argparse と複数の -v オプションを使用した冗長レベル
コマンドラインに -v オプションを追加して、異なる詳細レベルを指定できるようにしたいと考えています。例えば:
それぞれ verbose=0、verbose=1、verbose=2、verbose=3 になります。argparseを使用してそれを達成するにはどうすればよいですか?
必要に応じて、次のように指定することもできます
python - Python ArgParse サブパーサーと正しい関数へのリンク
さまざまなクラスのサーバー (FTP、HTTP、SSH など) を管理するための小さな Python スクリプトを作成しています。
サーバーの種類ごとに、さまざまな種類のアクション (デプロイ、構成、チェックなど) を実行できます。
基本Server
クラスがあり、次に継承するサーバーの種類ごとに個別のクラスがあります。
サンプル コマンド ラインは次のようになります。
コマンドラインから、必要な 2 つの必須引数は次のとおりです。
- 実行する操作
- 作成/管理するサーバーの種類
以前は、 argparse
andstore
操作を使用し、aを使用しdict
て、コマンド ライン オプションを実際のクラスおよび関数名に一致させていました。例えば:
(私の実際のコードでは、valid_operations は単純な 1:1 マッピングではありませんでした。)
そして、かなり恐ろしいコードを使用して、適切なタイプのオブジェクトを作成し、適切なクラスを呼び出します。
次に、代わりに argparse のsubparsers
機能を使用することにしました。そこで、各操作 (チェック、ビルド、デプロイなど) をサブパーサーにしました。
通常、各サブコマンドを特定の関数にリンクして、それを呼び出すことができます。ただし、ジェネリック関数を呼び出すだけでは不十分です。最初check()
に正しいタイプのオブジェクトを作成してから、そのオブジェクト内で適切な関数を呼び出す必要があります。
これを行うための良い、またはpythonicな方法はありますか? できれば、多くのハードコーディングを含まないもの、または不適切に設計された if/else ループですか?
python - Pythonでコマンドライン引数を取得するためにargparseを使用する方法は?
オプションがコマンド ラインを介して渡された後、整数値を保存できるようにしたいと考えています。理想的には次のようになります。
-s
- 次の整数を格納します-p
- 次の整数を保存します
最後の部分は、何をする必要があるかに応じて、3 つのオプション ( -r、-w、または-c ) のいずれかになります。
私はチュートリアルを読み込もうとしましたが、それらはすべて同じ 2 つの例を使用しており、 の後に整数を格納する方法を説明していません-option
。
python - デフォルトのサブコマンド、または argparse でサブコマンドを処理しない
デフォルトのサブコマンドを使用したり、サブコマンドが指定されていない場合を処理したりするにはどうすればよいargparse
ですか?
ここでは、次に高いレベルのパーサー (この場合は最上位のパーサー) のみに基づいて、コマンドを選択するか、引数を処理する必要があります。
python - argparseを使用したコマンドラインオプションは1つだけ
argparseモジュールを使用してCLIを作成しようとしていますが、引数の要件が異なるさまざまなコマンドが必要です。これを試しました。
私が欲しいのは走れるようにすることです、
しかし私が走るpython test.py foo
と私は得ます。コマンドが、、またはのように動作する方法はありますか?または、PythonでCLIを作成するためのより良い方法はありますか?python test.py test somearg
python test.py foo
error: too few arguments
git status
git commit
pip install
python - 最後の位置引数の後にオプションを解析しないでください
ssh
コマンドラインクライアントのラッパーを作成しています。の一部である最初の位置引数の後、それ以降のcommand
すべてのオプションも位置引数として扱われる必要があります。
の下optparse
で、これはで行われると思いますdisable_interspersed_args
。
現在、私はこのようなものを持っています:
ただし、オプションがコマンドの一部として渡された場合(など)、代わりに不明なオプションとしてmy_wrapper ls -l
解釈されます。ArgumentParser
error: unrecognized arguments: -l
を使用するparse_known_args()
と、オプションが乱れる可能性があります。
-b
ここでは、以前のの位置ls
が失わ-a
れ、コマンドから解析されていることがわかりますが、これは望ましくありません。
どうやって:
- 特定の時点以降に引数が解析されないようにしますか?
- 散在する引数の解析を無効にしますか?
- 接頭辞付きの引数を位置引数として使用できるようにしますか?
python - Pythonbrewでスペースを含む位置引数を使用するにはどうすればよいですか?
私はプログラムへの入力を受け入れるためにargparseモジュールを使用してきましたが、多くの成功を収めています。約6つのオプションの引数(-を前に付ける必要のある引数はリスト内のどこにでも配置できます)と1つの位置引数(引数を決定するために配置された順序を使用する必須の引数)を定義したので、使用状況チャートは次のようになります。これ(簡潔にするために追加のオプションの引数を削除):
Debian(Python 2.6に付属)でPython 2.7スクリプトを実行するために、私はpythonbrewを使用して成功しました。これにより、複数のPythonインストールを同じサーバーに共存させることができます。これを使用することの良い副作用は、スクリプトの実行可能アクセス許可をオフにできることを意味します。これにより、ユーザー管理がはるかに簡単になります。
スペースのあるファイルパス(私の唯一の位置引数)に格納しようとするまで、すべてが順調でしたが、できなかったことがわかりました。
すべて同じエラーメッセージを返します
誰かがこのエラーを確認できますか?Pythonグループでまだ誰も言及していないという事実から、これはPythonbrewのバグであると私は信じていますが、Pythonbrewを維持し、このスクリプトを実行する別の方法を見つけたいと思っています。今のところ、スペースのないフォルダにファイルを保存しているだけですが、誰かがこのエラーを解決してくれることを願っています。