我搜索了Google,Stack Overflow和我的Python用户指南,都没有找到一个简单可行的答案。
我在Windows7 x64机器上创建了一个测试文件,并尝试将“c:\goat.txt”打印到该文件中。基于StackOverflow上提供的示例,我尝试了以下几种方法:
在这一点上,我不想使用log模块,因为我不能从文档中理解如何基于二进制条件创建一个简单的日志。打印很简单,但是如何重定向输出并不明显。
我可以输入到我的interperter中的一个简单、清晰的例子是最有帮助的。
此外,任何建议的信息网站(而不是pydocs)是值得赞赏的。
import sys
print('test', file=open('C:\\goat.txt', 'w')) #fails
print(arg, file=open('fname', 'w')) # above based upon this
print>>destination, arg
print>> C:\\goat.txt, "test" # Fails based upon the above
发布于 2010-11-06 07:15:35
如果您使用的是Python 2.5或更早版本,请打开该文件,然后在重定向中使用file对象:
log = open("c:\\goat.txt", "w")
print >>log, "test"
如果您使用的是Python 2.6或2.7,则可以将print作为函数使用:
from __future__ import print_function
log = open("c:\\goat.txt", "w")
print("test", file = log)
如果您使用的是Python 3.0或更高版本,则可以省略将来的导入。
如果要全局重定向打印语句,可以设置sys.stdout:
import sys
sys.stdout = open("c:\\goat.txt", "w")
print ("test sys.stdout")
发布于 2014-10-25 08:10:28
一种稍微复杂一点的方法(这与上面的答案不同,它们都是有效的)是通过控制台将输出定向到一个文件中。
所以想象一下你有main.py
if True:
print "hello world"
else:
print "goodbye world"
你可以做到
python main.py >> text.log
然后text.log将获得所有输出。
如果您已经有一堆print语句,并且不想单独更改它们以打印到特定的文件,那么这很方便。只需在较高级别执行此操作,并将所有打印内容定向到一个文件(唯一的缺点是您只能打印到一个目标位置)。
发布于 2018-10-15 22:43:32
基于前面的回答,我认为这是实现(简单)上下文管理器风格的完美用例:
import sys
class StdoutRedirection:
"""Standard output redirection context manager"""
def __init__(self, path):
self._path = path
def __enter__(self):
sys.stdout = open(self._path, mode="w")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
sys.stdout.close()
sys.stdout = sys.__stdout__
然后:
with StdoutRedirection("path/to/file"):
print("Hello world")
此外,向StdoutRedirection
类添加一些功能(例如,允许您更改路径的方法)也非常容易。
https://stackoverflow.com/questions/4110891
复制相似问题