En python3, vous devez utiliser print
avec un argument de fichier si vous souhaitez remplacer stdout comme dit la documentation et comme indiqué dans cette question:
Python 2.7: Print to File
Cela vous donne le bloc de construction de base pour réaliser ce que vous cherchez. Vous n'êtes pas vraiment expliquer quoi que ce soit sur la façon dont vous vous attendez à utiliser avec tinydb ...
Cela dit, votre appel d'impression devrait ressembler à ceci:
fake_stdout = open('file', 'w')
print(data, file=fake_stdout)
Voilà.
Si pour certaines raisons que vous avez beaucoup de déclaration d'impression pour changer, vous pourriez faire quelque chose comme ceci:
Avoir un module avec un fil variable locale qui initialisées. regardez ici cette question: Thread local storage in Python
Ensuite, lorsque vous avez votre module configuré, vous pouvez ajouter cette déclaration dans tous vos fichiers qui a besoin d'une sortie standard d'impression différent
from special_print import local_print as print
Tout ce que vous avez à faire est de définir un variables ThreadLocal dans votre module special_print puis définir quand un nouveau thread commence par quelque chose comme ceci:
def print_factory(fout):
def local_print(arg):
print(arg, file=fout)
return local_print
dans chaque nouveau thread vous exécutez quelque chose comme ceci:
import special_print
special_print.local_print = print_factory(fake_stdout)
Ensuite, lorsque vous importez cette méthode print
dans chacun de vos threads, ils afficheront correctement les données dans le fake_stdout que vous avez défini dans chaque thread.
C'est une question python2 ou python3? Comment est-ce que vous «imprimez» réellement. Comment votre thread est réellement commencé. –
Pas exactement un doublon mais lié https://stackoverflow.com/questions/9316023/python-2-7-print-to-file –
C'est une question python3. Impression en utilisant l'impression de base ("....") '. Le fil commence à utiliser 'threading.Thread()' –