下载数据时如何阻止NLTK输出到终端?
How to stop NLTK from outputting to terminal when downloading data?
当我 运行 我的程序正在使用:
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
?
中提出了更好的解决方案。
旧答案:
根据 source code,nltk
下载器使用直接的 print()
调用来报告进度。这意味着不涉及您可以控制或预配置的记录器。
其中一个选项是即时修改 sys.stdout
-
在 Python 3.4+:
中有 redirect_stdout()
context manager
from contextlib import redirect_stdout
import os
import nltk
from nltk.corpus import wordnet
with redirect_stdout(open(os.devnull, "w")):
nltk.download('wordnet')
或其他一些选项:
- Suppress calls to print (python)
- Silence the stdout of a function in Python without trashing sys.stdout and restoring each function call
使用quiet=True
:
import nltk
nltk.download('wordnet', quiet=True)
当我 运行 我的程序正在使用:
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
?
旧答案:
根据 source code,nltk
下载器使用直接的 print()
调用来报告进度。这意味着不涉及您可以控制或预配置的记录器。
其中一个选项是即时修改 sys.stdout
-
在 Python 3.4+:
redirect_stdout()
context manager
from contextlib import redirect_stdout
import os
import nltk
from nltk.corpus import wordnet
with redirect_stdout(open(os.devnull, "w")):
nltk.download('wordnet')
或其他一些选项:
- Suppress calls to print (python)
- Silence the stdout of a function in Python without trashing sys.stdout and restoring each function call
使用quiet=True
:
import nltk
nltk.download('wordnet', quiet=True)