将所有python文件输出重定向到tinydb

时间:2017-10-19 06:43:18

标签: python python-3.x tinydb

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

我尝试过基本的:

methods: {
    ProcessLogin() {
    var status = ApiLogin(this.data);
    console.log(status);
 }
}

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

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

1 个答案:

答案 0 :(得分:0)

在python3中,如果要覆盖stdout,则必须使用print文件参数,如文档中所述并且如此问题中所述:

Python 2.7: Print to File

这为您提供了实现您所需要的基本构建模块。你真的没有解释任何关于你如何与tinydb一起使用它的事情......

那就是说,你的打印电话应该是这样的:

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

就是这样。

如果由于某些原因你需要更改大量的print语句,你可以这样做:

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

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

from special_print import local_print as print

您所要做的就是在special_print模块中定义一个threadlocal变量,然后在新线程以类似这样的内容开头时定义它:

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。