如何在下载数据时阻止NLTK向终端输出?

13

当我运行使用以下内容的程序时:

nltk.download('wordnet')
from nltk.corpus import wordnet
我得到以下输出到我的终端:
[nltk_data] Downloading package wordnet to
[nltk_data]     /Users/.../nltk_data...
[nltk_data]   Package wordnet is already up-to-date!

我的程序依赖于不将此信息保存到终端和结果输出文件中,那么我该如何防止上述行出现,或者将其写入sys.stderr以避免被包含在print之中?

2个回答

46

使用 quiet=True

import nltk
nltk.download('wordnet', quiet=True)

被接受的答案对我没有用,但这个更简洁的解决方案确实可行。 - Leonardo Gonzalez
大多数其他解决方案都不如这个更干净。我不知道这个参数的存在。谢谢。 - Pythoner

7

这个答案中提出了一个更好的解决方案。


旧答案:

根据源代码nltk下载器使用直接的print()调用来报告进度。这意味着没有日志记录器可以控制或预配置。

其中一种选项是临时在运行时修改sys.stdout - 在Python 3.4+中有redirect_stdout()上下文管理器

from contextlib import redirect_stdout
import os

import nltk
from nltk.corpus import wordnet


with redirect_stdout(open(os.devnull, "w")):
    nltk.download('wordnet')

或者其他选项:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接