【问题标题】:Change a redirect_stdout context更改 redirect_stdout 上下文
【发布时间】:2021-03-26 18:52:31
【问题描述】:

对于上下文,我正在使用多处理并运行多个子进程,这些子进程可能会在标准输出上打印它们正在执行的操作的日志。由于它们可能同时打印,导致日志非常混乱,我使用的是

from contextlib import redirect_stdout

for task in task_list:
    with redirect_stdout(buffer):
        (do some stuff)
    with lock_stdout:
        print(buffer)

结构。这样,他们只在完成任务后才打印,而且效果很好。现在,在某些特定条件下,我希望能够在标有“(做一些事情)”的上下文中在标准输出上打印一些东西,但我能够将任何东西打印到标准输出的唯一方法是通过使用警告,这很脏。有没有一种优雅的方法可以将 stdtout 重定向回 stdout 一段时间?

【问题讨论】:

    标签: python python-3.x stdout python-multiprocessing


    【解决方案1】:

    您可以在运行“东西”之前将 sys.stdout 存储到变量(可能是全局变量)中,并使用 print("stuff", file=real_stdout)

    【讨论】:

    • 它有效,谢谢。我试过“this”,但我没有注意到使用 sys.stdout 给了我新的缓冲区,而不是原来的(“真实”)stdout。
    猜你喜欢
    • 2013-02-04
    • 2014-01-14
    • 2014-11-21
    • 2011-01-13
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 2013-08-14
    相关资源
    最近更新 更多