メイン プログラム (test.py) と、メイン プログラムによって呼び出されるヘルパー関数を持つ小さなユーティリティ プログラム (test_utils.py) があるとします。debug_flag経由で読み込まれるブール値を渡すことで、コード内のデバッグ ステートメントをオンにしたいと思いargparseます。
の値に応じて、プログラム内の関数がtest_utils.pyデバッグ ステートメントも出力するようにしますdebug_flag。debug_flag各関数定義にパラメーターとしていつでも追加してtest_utils.py、関数が呼び出されたときにパラメーターを渡すことができますが debug_flag、グローバル変数を作成するなど、より良い方法はありますか? しかし、debug_flagからグローバルであると 宣言した場合test.py、それはどのようににインポートされ test_utils.pyますか?
ここで最もエレガント/Pythonicなアプローチは何でしょうか?
test.py:
import argparse
from test_utils import summation
def main():
args = get_args()
debug_flag = True if args[debug] == 'True' else False
print summation(5, 6, 7)
def get_args():
parser = argparse.ArgumentParser(description='Test program')
parser.add_argument('-d','--debug', help='Debug True/False', default=False)
args = vars(parser.parse_args())
return args
test_utils.py:
from test import debug_flag
def summation(x, y, z):
if debug_flag:
print 'I am going to add %s %s and %s' % (x, y, z)
return x + y + z
EDIT1:明確にするために-argparseを介してデバッグフラグを渡し、それによってdebug_flagをTrueに設定した場合-これはどのように内の関数に伝播されますtest_utils.pyか?
EDIT2: @joran-beasley の提案に基づいて、これが私が持っているものです。
test.py:
import argparse
import logging
from test_utils import summation
def main():
args = get_args()
logging.getLogger("my_logger").setLevel(logging.DEBUG if args['debug'] == 'True' else logging.WARNING)
print summation(5, 6, 7)
def get_args():
parser = argparse.ArgumentParser(description='Test program')
parser.add_argument('-d','--debug', help='Debug True/False', required=True)
args = vars(parser.parse_args())
return args
main()
test_utils.py
import logging
log = logging.getLogger('my_logger')
def summation(x, y, z):
log.debug('I am going to add %s %s and %s' % (x, y, z))
return x + y + z
test.py を実行すると、次のようになります。
$ python test.py -d True
No handlers could be found for logger "my_logger"
18