如何在Linux终端中抑制Python的弃用警告?
我通过 easy_install
安装了 i18ndude
(这是一个用于 Plone 的国际化工具)。
当我在终端运行这个工具 i18ndude
时,出现了:
/usr/local/lib/python2.6/dist-packages/i18ndude-3.1.2-py2.6.egg/i18ndude/odict.py:7: DeprecationWarning: object.__init__() takes no parameters
dict.__init__(self, dict)
我该如何在命令行调用这个工具时抑制这些警告信息?这样做可能吗?我知道理论上我应该安装其他的 Python 解释器,然后从那个解释器调用 i18ndude,但我想要一个更简单的方法(比如一个参数之类的)。
顺便说一下,我使用的是来自 Plone 官方网站 的 i18ndude
脚本。
4 个回答
你可以暂时屏蔽警告:
如果你在使用一些代码,这些代码会发出警告,比如使用了不推荐的函数,但你又不想看到这些警告,那么你可以使用一个叫做 catch_warnings 的上下文管理器来屏蔽这些警告:
import warnings
def fxn():
warnings.warn("deprecated", DeprecationWarning)
with warnings.catch_warnings():
warnings.simplefilter("ignore")
fxn()
在这个上下文管理器的范围内,所有的警告都会被忽略。这让你可以使用那些已知不推荐的代码,而不必看到警告,同时又不会影响到其他可能不知道自己在使用不推荐代码的代码。注意:这种效果只能在单线程的应用程序中保证。如果有两个或更多的线程同时使用 catch_warnings 上下文管理器,结果就不确定了。
如果你是以脚本的方式运行的话,可以使用:
#!/usr/bin/env python -W ignore::DeprecationWarning
可以使用重定向,但这样会把所有发送到那个“流”的信息都给屏蔽掉;比如:
i178ndude 2>/dev/null
这段代码把流2(通常是程序的错误输出,也就是stderr,但一些弃用警告可能会发送到其他流)发送到了一个空设备。这就相当于一种“即使你不知道怎么做也要修复”的方法。实际上,有一个选项,-W,可以这样使用:-W ignore::DeprecationWarning
,或者简单地使用-W ignore
来忽略所有警告。你可以写一个脚本来调用Python解释器运行你的程序,或者更合理地修改程序的#!
行,像这样#!/usr/bin/env python -W ignore::DeprecationWarning
。