正しく動作するために 6 つの情報を必要とするコマンドライン ユーティリティを構築しています。次のようになります。
fm-git filename repository path comment username password
ただし、個々のシステムでは、username
一定password
になります。
ユーティリティを実行すると、ビルドが難しくなります。たとえば、ユーティリティへのテスト呼び出しを次に示します (読みやすくするために複数の行に分割されています)。
/Users/chuck/Projects/fm-git/fm-git.py chiv-lib
/Users/chuck/Projects/chiv-lib/ Chivalry/ "continued testing"
Administrator abc1234
これらの引数を渡す別の方法を検討しています。たとえば、fm-git -f filename -r repository ...
または。また、および引数の構成設定fm-git --filename filename --repository repository...
を行うことも検討しています。これらは通常は変更されないため、ユーティリティ呼び出しから削除できます。username
password
ユーティリティ引数が多数あるが必須である場合、ユーティリティ呼び出しの読みやすさを維持するための一般的な方法は何ですか?
答え1
通常、UNIX アプリケーションでは、この情報を提供する方法が複数用意されており、より「具体的な」方法が、より具体的でない方法を上書きします。
つまり、次のようになります。
グラフィカル アプリケーションの場合、使用されるツールキットは、ほぼ常に何らかの方法でリソース (たとえば、
xrdb
プレーン X の -style など)を提供します。ツールキットがまだ提供していない場合は、構成ファイル。
コマンドライン オプション、短い形式と長い形式の両方 (
getopt
C では簡単)情報が指定されていない場合の適切なデフォルト(例:パスの現在のディレクトリ)
位置パラメータは、いくつかの必須パラメータにのみ意味があり、その後にファイルのリストが続く場合もあります (ワイルドカード指定は複数のパラメータに拡張されるため)。 6 つの個別の部分は多すぎます。順序を覚えるのが難しいため、これらにはオプションを使用します。
--password -
パスワードの場合、特殊な値 (例:または)を使用して、アプリケーションが stdin からパスワードを読み取る方法を提供すると便利です-p -
。
アプリケーションを使用する人は誰でも、特定のユースケースに最適なオプションとして、ハードコードされたパスワード、構成ファイル内のパスワード、またはユーザーにパスワードを入力させるオプションを選択できます。
答え2
一般的に、次のことを行うことをお勧めします。
- 依存する引数を計算しますが、それらを再定義できるようにします。たとえば、例では と
filename
同じである$(basename repository)
ため、リポジトリのみが必要になる場合がありますが、--filename
代替ファイル名を提供するオプションがあります。 - コマンドラインと
ps
出力から認証を非表示にします。それらを などのファイルに配置し、$HOME/.fm-git.conf
ファイルに などの追加の制限を与えてchmod 600 $HOME/.fm-git.conf
、ファイルから読み取ります。場合によっては、環境変数からユーザー名とパスワードを取得することもできます (デフォルトのユーザー名はシステム ユーザー名または などSUDO_USER
) が、そうでない場合もあります。
したがって、2 つの最適化の後は、CLI パラメーターは 3 つだけになりますが、これは許容範囲だと思います。これらを位置パラメーターとして使用するか、次のようなフラグを提供してください--comment
。長いフラグを提供すると、プログラムをスクリプト内で使用する場合に読みやすさが向上しますが、CLI から手動でプログラムを実行する場合は、より多くの入力が必要になります。
とにかく、Pythonでプログラムを書くときは、argparse モジュール-- パラメータを解析し、将来変更したい場合にも役立ちます。