如何静默或重定向 shutil.move() 的输出或其他在静默模式下移动文件的方法?

How to silent or redirect output of shutil.move() or another method to move files in silent mode?

正在使用 Python shutil.move() 方法,但需要将数百万个文件从一个位置移动到另一个位置,我想重定向/静默 shutil.move() 的输出。

if os.path.exists(logs_path_archive):
    for source_file in downloaded_files:
        destination_file = source_file.replace(logs_path,logs_path_archive)
        shutil.move(source_file,destination_file)

有什么推荐吗?

在您指定的评论中,您使用的是 Jupyter Notebooks。因此,您可以为此使用 IPython/Jupyter 内置的几个选项。

如果移动步骤只有一个单元格,则在单元格的开头放置以下内容:

%%capture out_stream
shutil.move(<original_filename>,<new_file_name>)

但是,这听起来像是移动步骤在一个单元格中的许多其他步骤中,因此为了让移动安静下来,您可以使用 with io.capture_output() as captured: 仅抑制来自 with 块,像这样:

from IPython.utils import io
with io.capture_output() as captured:
    shutil.move(<original_filename>,<new_file_name>)

有关这两者的更多信息,请参阅页面 here%%capture 细胞魔法可能会高于 link 发送给你的地方。


如果您确实需要使用纯 python,您可以使用 with 语句和 contextlib(类似于处理输出的上下文管理器)来重定向它,类似于 with io.capture_output() as captured 上面的想法。在这里,我将它发送到 _,当您不打算稍后使用分配的对象时经常使用它。

import contextlib
with contextlib.redirect_stdout(_):
    shutil.move(<original_filename>,<new_file_name>)