Python 在启用或禁用详细性的情况下,将标准输出重定向到控制台和文件
我写了一些代码只是为了在python中练习冗长。详细信息通过Python 在启用或禁用详细性的情况下,将标准输出重定向到控制台和文件,python,stdout,verbosity,Python,Stdout,Verbosity,我写了一些代码只是为了在python中练习冗长。详细信息通过ArgumentParser模块嵌入。但是,我也希望在禁用详细性时将stdout写入文件: #!/usr/bin/python import sys def printable1(): print "1" def printable2(): print "2" def printable3(
ArgumentParser
模块嵌入。但是,我也希望在禁用详细性时将stdout
写入文件:
#!/usr/bin/python
import sys
def printable1():
print "1"
def printable2():
print "2"
def printable3():
print "3"
def Main1():
printable1()
printable2()
def Main2():
printable2()
printable3()
class Logger(object):
def __init__(self):
self.terminal = sys.stdout
self.log = open("logfile2.log", "a")
def write(self, message):
self.terminal.write(message)
self.log.write(message)
if __name__ == "__main__":
from argparse import ArgumentParser
parser = ArgumentParser(description='PC Test',version="1.0")
parser.add_argument('--nopc',action='store_true', help='Do not perform test on the PC')
parser.add_argument('--pc', action='store_true', help='Do perform test on the PC')
# VERBOSITY
parser.add_argument('--vmode', dest='verbose', action='store_true',
help='Enable printing of status messages to stdout.')
args = parser.parse_args()
sys.stdout = Logger()
if args.verbose:
if args.pc:
Main1()
elif args.nopc:
Main2()
else:
Main1()
Main2()
此代码仅在使用
--vmode
参数启用详细性时才将标准输出写入文件。您能帮我找到一个解决方案吗?您可以使用该模块处理打印到终端并写入文件的操作,而不是重新发明轮子。细节部分仍由您决定:
import logging
import logging.handlers
log = logging.getLogger(__name__)
log.addHandler(logging.StreamHandler()) # Prints to console.
log.addHandler(logging.handlers.RotatingFileHandler('logfile2.log'))
log.setLevel(logging.INFO) # Set logging level here.
从现在起,您可以使用常规的log
对象在脚本中执行日志记录,条目将同时发送到控制台和文件:
log.info('test')
log.warning('test')
另外,我建议使用来处理注册日志记录程序和处理程序-这是一种更具声明性的替代方法(您仍然需要像上面那样实例化
log
对象)。我已经清理了您的代码,只包括相关行(删除所有注释代码、额外的空白和未使用的导入);如果您的示例只包含重现问题所需的代码,我们将更容易为您提供帮助。谢谢您,Martjin,我将在未来处理它。我再次道歉。