假设我有一个主程序 (test.py) 和一个小实用程序 (test_utils.py),它具有由主程序调用的辅助函数。我想通过传递一个debug_flag
布尔值来打开代码中的调试语句,该布尔值是通过argparse
.
现在我希望我的test_utils.py
程序中的函数也可以根据debug_flag
. 我总是可以将debug_flag
参数添加到每个函数定义中,test_utils.py
并在调用函数时传递参数,但是这里有更好的方法,比如创建 debug_flag
一个全局变量吗?但是,如果我确实声明debug_flag
为 global from test.py
,那将如何导入 test_utils.py
?
这里最优雅/ Pythonic的方法是什么?
测试.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 的建议,这就是我所拥有的。
测试.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