1. ホーム
  2. python

[解決済み] スクリプトに --verbose または -v オプションを実装するには?

2022-03-07 19:48:57

質問

は知っています。 --verbose または -v をいくつかのツールから取得し、これを自分のスクリプトやツールに実装してみたいと思っています。

配置を考えました。

if verbose:
    print ...

を私のソースコードに通すことで、もしユーザーが -v オプションを指定すると、変数 verbose に設定されます。 True と表示され、テキストが印刷されます。

この方法が正しいのか、それとももっと一般的な方法があるのでしょうか?

追加です。私は引数の解析の実装方法を求めているのではありません。それがどのように行われるかは知っています。私はverboseオプションにのみ特別な興味を持っています。

どのように解決するのですか?

私の提案は、関数を使うことです。しかし、むしろ if を使いたくなるかもしれませんが、このようにします。

if verbose:
    def verboseprint(*args):
        # Print each argument separately so caller doesn't need to
        # stuff everything to be printed into a single string
        for arg in args:
           print arg,
        print
else:   
    verboseprint = lambda *a: None      # do-nothing function

(そうです、関数を if ステートメントで、その条件が真のときだけ定義されます!)

Python 3を使用している場合、ここで print はすでに関数である(もしくは print を使って2.xで関数として from __future__ import print_function ) は、さらにシンプルになりました。

verboseprint = print if verbose else lambda *a, **k: None

この方法では、冗長モードがオフの場合は何もしない(ラムダを使う)関数として定義され、常に verbose のフラグを立てます。

ユーザーが冗長性モードを変更できた場合 実行中に を使用する場合、これは間違った方法です。 if が、コマンドラインフラグで設定するため、判断は一度だけでよいのです。

その上で、例えば verboseprint("look at all my verbosity!", object(), 3) を表示させたい場合は、常にquot;verbose"メッセージを表示させます。