2017-10-19 35 views
1

我有一個python腳本,它由多個正在運行的線程組成,並且它們有打印輸出來告訴任何連接失敗,例如,未能打開端口,連接失敗等將所有python文件輸出重定向到tinydb

我試過基本:

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

,但沒有被保存到文件中。我試圖獲得系統打印輸出並將其保存到tinydb。我正在嘗試將所有輸出記錄到tinydb中。我怎樣才能做到這一點?

是否可以連續檢索所有打印輸出並使用tinydb將其保存到json文件中?

+0

這是一個python2或python3的問題?你怎麼實際上'打印'。你的線程是如何開始的? –

+0

不完全重複但相關https://stackoverflow.com/questions/9316023/python-2-7-print-to-file –

+0

這是一個python3問題。使用基本的'print(「....」)'打印'。線程開始使用'threading.Thread()' –

回答

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。