Python 虽然我想将输出重定向到文件,但 ftputil 正在输出到终端

Python ftputil outputting to terminal although I want to redirect output to a file

我在终端上 运行ning 一个 Python3 脚本,在我的终端上它写出了很多我添加的 print() 语句,以及来自我正在使用的图书馆。

我希望将输出保存在一个文件中,所以我 运行 这样的脚本。

python3 myscript.py > logfile.txt

print() 在 Python 中的所有内容现在都按照我的意愿进入文件,而不是打印到我的终端。

但是,在这个脚本中,我还使用 ftputil 库来下载文件,ftputil 的一些输出仍然显示在我 运行 脚本所在的终端上。所以现在我的程序的输出被分成两部分,这使得它不太有用。

download-ftp.py:160: DeprecationWarning: `use_list_a_option` will default to `False` in ftputil 4.x.x with ftputil.FTPHost(ftp_addr, ftp_user, ftp_pw) as ftp_host:

需要什么才能使 ftputil 的输出也进入我想要的文件?

你是对的,这个弃用警告来自 ftputil。

ftputil 使用 Python warnings module to show this warning. The warnings module not only outputs warnings (by default to stderr), but also offers ways to control which warnings are actually shown (see The Warnings Filter and Temporarily Suppressing Warnings).

您可以使用

抑制 ftputil 警告
import warnings

import ftputil


with warnings.catch_warnings():
    warnings.simplefilter("ignore", category=DeprecationWarning)
    ftp_host = ftputil.FTPHost(host, user, password)
...

如果您确实想要日志文件中的弃用警告,您可以使用其他人在评论中建议的方法。这是一个例子:

import sys

import ftputil           


old_stderr = sys.stderr
sys.stderr = sys.stdout
try:
    ftp_host = ftputil.FTPHost(host, user, password)
finally:
    sys.stderr = old_stderr