【问题标题】:Redirecting all python file output to tinydb将所有python文件输出重定向到tinydb
【发布时间】:2017-10-19 06:43:18
【问题描述】:

我有一个 python 脚本,它由几个正在运行的线程组成,它们有打印输出来告诉任何连接失败,例如无法打开端口,无法连接等。

我已经尝试过基本的:

import sys
sys.stdout = open('file', 'w')

但文件中没有保存任何内容。我正在尝试获取系统打印输出并将其保存到tinydb。我正在尝试将所有输出记录到 tinydb 中。我该怎么做?

是否可以连续检索所有打印输出并使用 tinydb 将其保存到 json 文件中?

【问题讨论】:

  • 这是python2还是python3的问题?你怎么print。您的主题实际上是如何开始的。
  • 这是一个python3问题。使用基本的print("....") 打印。线程开始使用threading.Thread()
  • @Loïc Faure-Lacroix 链接似乎没有回答我的问题..

标签: python python-3.x tinydb


【解决方案1】:

在 python3 中,如果您想按照文档所述和此问题中的说明覆盖标准输出,则必须使用带有文件参数的 print:

Python 2.7: Print to File

这为您提供了实现所需目标的基本构建块。您并没有真正解释您希望如何将它与 tinydb 一起使用...

也就是说,您的打印调用应如下所示:

fake_stdout = open('file', 'w')
print(data, file=fake_stdout)

就是这样。

如果由于某些原因您有很多打印语句要更改,您可以这样做:

有一个带有初始化的线程局部变量的模块。这里看这个问题:Thread local storage in Python

然后,当您设置好模块后,您可以在所有需要不同打印标准输出的文件中添加此语句

from special_print import local_print as print

您所要做的就是在您的 special_print 模块中定义一个线程局部变量,然后在新线程开始时定义它,如下所示:

def print_factory(fout):
    def local_print(arg):
        print(arg, file=fout)
    return local_print

在每个新线程中运行如下内容:

import special_print
special_print.local_print = print_factory(fake_stdout)

然后当您在每个线程中导入此print 方法时,它们会正确地将数据输出到您在每个线程中定义的 fake_stdout。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-11
    • 2015-03-24
    • 1970-01-01
    • 2011-10-04
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多