python编程中,往往需要将结果用print等输出,如果希望输出既可以显示到IDE的屏幕上,也能存到文件中(如txt)中,该怎么办呢?
方法1
可通过日志logging模块输出信息到文件或屏幕。但可能要设置log的level或输出端,对于同时需要记录debug error等信息的较为合适,官方教程推荐学习用更规范的logger来操作。
例如,可参考来自官网的这段代码。
import logging logging.basicConfig(filename='log_examp.log',level=logging.DEBUG) logging.debug('This message should go to the log file') logging.info('So should this') logging.warning('And this, too')
方法2
利用print输出两次
比如这里我想输出程序的path和程序的文件名
import os # 第一句输出到consle: print("filepath:",__file__,"\nfilename:",os.path.basename(__file__)) # 第二句输出到txt: with open("outputlog.txt","a+") as f: print("filepath:",__file__, "\nfilename:",os.path.basename(__file__)) #当然 也可以用f.write("info")的方式写入文件
方法3
利用输出重定向输出两次
同样输出程序path和文件名
import os import sys temp=sys.stdout # 记录当前输出指向,默认是consle with open("outputlog.txt","a+") as f: sys.stdout=f # 输出指向txt文件 print("filepath:",__file__, "\nfilename:",os.path.basename(__file__)) print("some other information") print("some other") print("information") sys.stdout=temp # 输出重定向回consle print(f.readlines()) # 将记录在文件中的结果输出到屏幕
R的重定向
这里多嘴补充一下,在windows下的R语言中,有个sink(‘文件名.后缀名') 可以将输出重定向到文件中,然后用sink()重返控制台 很是方便
以上这篇python 信息同时输出到控制台与文件的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
问题语句:我有一个在Xcode中运行的程序,它有一堆print()语句,可以很好地将输出打印到调试控制台。然而,我希望也能够将这些输出重定向到一个文件,这样我就可以让用户将它们发送给我,作为调试的一种方式。 SO上找到的解决方案使我可以将输出重定向到文件,但调试控制台输出将丢失。 问:我想要我的蛋糕和吃它。我希望能够将print()语句重定向到调试控制台和文件。 所以我有引用:https://st
问题内容: 我有一段简单的代码将控制台文本输出到Java中的文本文件: 但是,我要求此文本文件包含控制台中生成的错误消息,但不包括这些错误消息。 我该怎么做呢? 问题答案: 加: 在末尾。
我将log4j用于日志。 我有一个类只想打印到控制台的log.info级别, 并打印到一些文件log.info+log.debug级别(同一个类)。 我尝试按以下方式设置log4j.xml: 这是我的配置,但我不能使用相同包名的2个记录器。 有什么建议吗? 谢谢, 或者。
问题内容: 我正在尝试在python中找到一种将脚本执行日志重定向到文件以及以pythonic方式的方法。有没有简单的方法可以做到这一点? 问题答案: 我想出了这个[unested] 在python中将期望有一个函数。您可以使用具有此功能的自定义对象。否则,您也可以让sys.stdout引用您的对象,在这种情况下,即使没有,它也会被准备。
问题内容: 对詹金斯来说还很新,我有一个简单而烦人的问题。当我在Jenkins上运行作业(构建)时,我触发ruby命令执行我的测试脚本。 问题是Jenkins没有从控制台实时显示输出。这是触发日志。 基本上,它会挂在此输出上,直到构建完成为止,而不是仅仅显示完整的输出。有趣的是,这不是一致的行为,有时它可以正常工作。但是大多数时候没有实时控制台输出。 詹金斯版本:1.461 问题答案: 为了澄清一
问题内容: 我想知道如何像某些C / C ++程序那样在Python中创建这些漂亮的控制台计数器之一。 我在做一个循环,当前输出如下: 更整洁的是只更新最后一行; 我已经在许多控制台程序中看到了这一点,并且想知道是否/如何在Python中做到这一点。 问题答案: 一个简单的解决方案是只在字符串之前编写而不添加换行符。如果字符串永远不会变短,那就足够了… 进度条稍微复杂一点……这是我正在使用的东西: