Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Linux终端上抑制Python弃用警告?_Python_Linux_Warnings_Deprecated - Fatal编程技术网

如何在Linux终端上抑制Python弃用警告?

如何在Linux终端上抑制Python弃用警告?,python,linux,warnings,deprecated,Python,Linux,Warnings,Deprecated,我使用easy\u 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)

我使用
easy\u 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,但我希望使用更简单的方法(比如参数之类的)


顺便说一句,我使用的是来自的
i18ndude
脚本。

可以使用重定向,但它会抑制发送到该“流”的所有消息;e、 g

i178ndude 2>/dev/null 向空设备发送流2(通常是程序的stderr,但可能会向其他流发送弃用警告)。这是“即使你不知道如何解决它”的解决方法。实际上,有一个选项,-W,可以这样使用:
-W ignore::DeprecationWarning
或者干脆忽略所有警告的
-W ignore
。您可以编写一个脚本,在程序上调用python解释器,或者更合理地修改
#,类似于
#/usr/bin/env python-W ignore::DeprecationWarning
您可以:

如果您使用的代码知道会引发警告,例如不推荐使用的函数,但不希望看到该警告,则可以使用catch_warnings上下文管理器抑制该警告:

在上下文管理器中,所有警告都将被忽略这允许您使用已知的不推荐使用的代码,而不必查看警告,同时不抑制其他可能不知道使用了不推荐使用的代码的代码的警告。注意:这只能在单线程应用程序中得到保证。如果两个或多个线程同时使用catch_warnings上下文管理器,则该行为未定义


如果作为脚本运行,您可以使用:

#!/usr/bin/env python -W ignore::DeprecationWarning
见:

-W arg

警告控制。Python的警告机制默认情况下会将警告消息打印到sys.stderr。典型的警告消息具有以下形式:

文件:行:类别:消息

默认情况下,对于出现警告的每个源行,每个警告都打印一次。此选项控制打印警告的频率

可以给出多个-W选项;当警告匹配多个选项时,将执行最后一个匹配选项的操作。无效-W选项将被忽略(不过,在发出第一个警告时,会打印一条关于无效选项的警告消息)


我不明白这个解决方案。我应该把这个密码放在哪里?什么是“上下文管理器”?我无法编辑来源。无论如何,谢谢。我搜索过python文档,但这个解决方案不是我想要的,这就是为什么我问如何在命令行上抑制某些内容。如果无法修改源代码,请为bin编写一个脚本调用它,并使用
-W ignore::DeprecationWarning
选项。我试图从bash脚本运行eyed3,以忽略python警告,不确定如何在bash scriptx中执行此操作由于您感兴趣的python脚本的名称,您可以显式调用解释器(python):
python-W ignore::DeprecationWarning/path/to/X
/path/to/X可以更改为
$(哪个X)
问题是我有一个调用i18ndude的bash脚本(i18ndude.sh)。但是i18ndude并不是一个Python脚本,我只是通过终端键入“i18ndude”来调用它,所以我不知道把这个调用放在哪里……而且你不能修改bash脚本?尝试
文件$(哪个i18ndude)
;它应该尝试“猜测”i18ndude是什么。(那么,有一个bash脚本调用i18ndude调用python脚本吗?)。(疑问:您知道脚本不需要.sh、.py、.xyz扩展名吗?)i18ndude-“/usr/local/bin/i18ndude:python脚本文本可执行文件”。我有一个bash脚本,我用“shi18ndude.sh”来命名它。此脚本调用i18ndude。这里是脚本源代码:然后,您可以在sh脚本中使用
python-W ignore::DeprecationWarning/path/to/i18ndude
更改i18ndude的每次出现,并且/path/to/i18ndude可以放入一个变量,比如
ndude=$(哪个i18ndude),因此您可以编写
$ndude
,而不是/path/toi18ndude;如果可以修改sh脚本;否则,将其复制到您的bin或任何您想要的地方,对其进行修改,然后像
sh~/bin/i18ndude.sh`或类似的方式调用它;你可以
chmod+x
it,把
#/bin/bash
作为第一行,最终将
~/bin
添加到路径中,并直接使用
myi18ndude.sh
运行(更改名称以避免与i18ndude.sh冲突)。
import warnings

def fxn():
    warnings.warn("deprecated", DeprecationWarning)

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    fxn()
#!/usr/bin/env python -W ignore::DeprecationWarning