首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将打印输出重定向到TXT文件

如何将打印输出重定向到TXT文件
EN

Stack Overflow用户
提问于 2010-11-06 07:10:35
回答 7查看 172.6K关注 0票数 64

我搜索了Google,Stack Overflow和我的Python用户指南,都没有找到一个简单可行的答案。

我在Windows7 x64机器上创建了一个测试文件,并尝试将“c:\goat.txt”打印到该文件中。基于StackOverflow上提供的示例,我尝试了以下几种方法:

在这一点上,我不想使用log模块,因为我不能从文档中理解如何基于二进制条件创建一个简单的日志。打印很简单,但是如何重定向输出并不明显。

我可以输入到我的interperter中的一个简单、清晰的例子是最有帮助的。

此外,任何建议的信息网站(而不是pydocs)是值得赞赏的。

代码语言:javascript
复制
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
EN

回答 7

Stack Overflow用户

发布于 2010-11-06 07:15:35

如果您使用的是Python 2.5或更早版本,请打开该文件,然后在重定向中使用file对象:

代码语言:javascript
复制
log = open("c:\\goat.txt", "w")
print >>log, "test"

如果您使用的是Python 2.6或2.7,则可以将print作为函数使用:

代码语言:javascript
复制
from __future__ import print_function
log = open("c:\\goat.txt", "w")
print("test", file = log)

如果您使用的是Python 3.0或更高版本,则可以省略将来的导入。

如果要全局重定向打印语句,可以设置sys.stdout:

代码语言:javascript
复制
import sys
sys.stdout = open("c:\\goat.txt", "w")
print ("test sys.stdout")
票数 123
EN

Stack Overflow用户

发布于 2014-10-25 08:10:28

一种稍微复杂一点的方法(这与上面的答案不同,它们都是有效的)是通过控制台将输出定向到一个文件中。

所以想象一下你有main.py

代码语言:javascript
复制
if True:
    print "hello world"
else:
    print "goodbye world"

你可以做到

代码语言:javascript
复制
python main.py >> text.log

然后text.log将获得所有输出。

如果您已经有一堆print语句,并且不想单独更改它们以打印到特定的文件,那么这很方便。只需在较高级别执行此操作,并将所有打印内容定向到一个文件(唯一的缺点是您只能打印到一个目标位置)。

票数 20
EN

Stack Overflow用户

发布于 2018-10-15 22:43:32

基于前面的回答,我认为这是实现(简单)上下文管理器风格的完美用例:

代码语言:javascript
复制
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__

然后:

代码语言:javascript
复制
with StdoutRedirection("path/to/file"):
    print("Hello world")

此外,向StdoutRedirection类添加一些功能(例如,允许您更改路径的方法)也非常容易。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4110891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档