代码之家  ›  专栏  ›  技术社区  ›  helpisgood

下载数据时,如何阻止NLTK输出到终端?

  •  9
  • helpisgood  · 技术社区  · 8 年前

    当我运行我的程序时,该程序正在使用:

    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 回复  |  直到 8 年前
        1
  •  37
  •   alvas    8 年前

    使用 quiet=True :

    import nltk
    nltk.download('wordnet', quiet=True)
    
        2
  •  6
  •   alecxe    6 年前

    中提出了一个更好的解决方案 this answer .


    旧答案:

    根据 source code , nltk downloader使用直接 print() 呼叫报告进度。这意味着不涉及您可以控制或预配置的记录器。

    其中一个选项是修改 sys.stdout 暂时在飞行中- 这就是 redirect_stdout() context manager 在Python 3.4+:

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

    或其他一些选项: