メイン プログラム (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