1

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

我已经尝试过基本的:

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

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

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

4

1 回答 1

0

在 python3 中,print如果要按照文档所述覆盖标准输出,则必须与文件参数一起使用,并且如本问题所述:

Python 2.7:打印到文件

这为您提供了实现所需内容的基本构建块。您并没有真正解释您希望如何将它与 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。

于 2017-10-19T07:08:43.907 回答