我有两个python脚本,一个作为workflow.py,另一个是task.py. workflow.py定义了task.py的工作流,因此它只有一个main,它实例化task.py的构造函数。 worflow.py的结构如下:
workflow.py
from optparse import OptionParser
from optparse import OptionGroup
from task import *
def main():
dir = os.path.dirname(os.path.abspath(sys.argv[0]))
try:
parser = parse_options(parser, dir)
(options, args) = parser.parse_args()
print ("everything working fine in workflow")
except SystemExit:
return 0
task_object = task_C(options.source_dir, options.target, options.build_dir)
print ("workflow is reached")
task_object.another_funct()
##following 3 lines is when set_logger is defined
log = task_object .set_logger()
log.info(""workflow is reached"")
log.info("more info if required")
def parser(parser, dir):
group = OptionGroup(parser, "Prepare")
group.add_option("-t", "--target",action="store", dest="target",
help="Specifies the target.")
group.add_option("-s", "--Source",action="store", dest="source_dir",
help="Specifies the source dir.")
group.add_option("-b", "--build",action="store", dest="build_dir",
help="Specifies the build dir.")
parser.add_option_group(group)
task.py
class task_C():
def __init__(self, source_dir, target, build_dir):
self.target = self.settargetplatform(target)
self.source_dir = self.setsourcedir(source_dir)
self.build_dir = self.setbuilddir(build_dir)
def settargetplatform( target):
...sets target dir
def setsourcedir(source_dir ):
...sets source_dir
def setbuilddir(build_dir):
..sets build_dir
def another_funct( ):
print ("inside the another funct")
print ("some usefull info")
print ("...")
##following part after adding set_logger then using logger
log = self.set_logger()
log.info( "inside the another funct")
log.info( " some usefull info")
log.info ("...")
.
def set_logger(self):
logging.basicConfig()
l = logging.getLogger('root')
l.setLevel(logging.DEBUG)
formatter = logging.Formatter(' %(levelname)s : %(message)s')
fileHandler = logging.FileHandler(self.build_dir+"/root.log", mode='w')
fileHandler.setFormatter(formatter)
l.addHandler(fileHandler)
现在,如上面的脚本所示,在工作流内部调用了task.py构造函数,两个脚本中都有各种print语句,我希望有一个logger而不是print语句,为此目的我想将日志放在位置" build_dir"但是该位置是在task.py中设置的,我不想在workflow.py中添加另一个函数来检索' build_dir'。我在task.py中添加了set_logger()函数,你可以在task.py中看到它可以满足我的目的但是我得到的日志包含所有NULL NULL NULL ...等等。那么,建议我如何在这两个脚本中包含一个包含所有打印语句的日志,以及我需要做出哪些改进?
答案 0 :(得分:1)
实际上可以这样做,但重点是日志位置 必须在workflow.py中定义,我不想定义位置 因为它已在task.py中定义。在工作流程中我不想 定义已在task.py中设置的记录器的相同位置
根据您的上述评论 -
然后,您可以在set_logger()
中拨打worker.py
并将其传递给task.py
,即worker.py
中包含以下内容:
task_object = task_C(options.source_dir, options.target, options.build_dir)
log = task_object .set_logger()
对于对任务方法的任何调用,传递记录器(方法必须接受它作为参数) - 例如:
task_object.another_funct(log=log)
要使记录无法正常工作,请在return l
set_logger()
末尾添加task.py
答案 1 :(得分:-1)
我想我会在<div class="wrapperShortOuter" style="width: 300px;">
<div class="wrapperLongInner" style="width: 600px;">
<div class="content" id="first" style="width: 300px">
<div style="background-color: turquoise; width: 300px; height: 200px;"></div>
</div>
<div class="content" id="second" style="width: 0px;">
<div style="background-color: burlywood; width: 300px; height: 150px;"></div>
</div>
<div class="content" id="third" style="width: 0px;">
<div style="background-color: yellowgreen; width: 300px; height: 250px;"></div>
</div>
</div>
</div>
<div style="background-color: red; width:50px; height: 100px;"></div>
中定义记录器,并将其作为参数传递给workflow.py
的构造函数。这似乎是最简单的解决方案。