您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用上下文管理器将python脚本输出到文件?

使用上下文管理器将python脚本输出到文件?

上下文管理器是可以与with语句一起使用的东西。它被明确设计为:

例如,open可以用作上下文管理器。在下面的代码

with open(...) as f:
    # do stuff

没关系stuff文件将始终关闭。(好吧,通常。除非在愚蠢的情况下,例如关闭电源或终止进程。)

在这种情况下,应使用上下文管理器。在我看来,它看起来并不像您一样,因此我认为没有理由要使用上下文管理器。

还有一种使用上下文管理器的替代(而不是更好或更坏,只是有所不同)的代码编写方式。如果您想stdout暂时重定向-但要确保在完成后将其还原- 那么您就处于上述情况。这是一个例子:

@contextlib.contextmanager
def redirect_stdout(stream):
    import sys
    sys.stdout = stream
    yield
    sys.stdout = sys.__stdout__

然后,您可以编写如下代码

with open(...) as f:
    with redirect_stdout(f):
        # do stuff

而对stdout in的任何写操作都stuff将转到f

编辑:您是对的,没有条件有条件拥有上下文管理器是正确的:要么您在其中,要么不在。您可以随时编写自己的内容,但可能无济于事:

@contextlib.contextmanager
def maybe_open(path, do_nothing=True):
    if do_nothing:
        f = None
        yield sys.stdout
    else:
        f = open(path)
        yield f

    if f:
        f.close()

几乎可以肯定这是过度杀伤力。

python 2022/1/1 18:33:54 有536人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶