擅长:python、mysql、java
<p>完全不要这样做:只要告诉Python不要首先打印警告,然后就不需要过滤掉它们。你知道吗</p>
<pre><code>python -W ignore yourprogram ...
</code></pre>
<p>或者,考虑修改调用相关组件的代码,以抑制调用站点上的警告,如<a href="https://docs.python.org/2/library/warnings.html#temporarily-suppressing-warnings" rel="nofollow">given in the Python documentation</a>:</p>
<pre><code>import warnings
with warnings.catch_warnings():
warnings.simplefilter('ignore')
urllib3.doTheThingThatCausedTheWarning(...)
</code></pre>
<hr/>
<p>最后,如果你真的想把它作为一个过滤器来处理,只需要使用<code>grep -v Insecure</code>;<code>sed</code>就可以了。你知道吗</p>
<pre><code>sh -c 'printf "%s\n" "stderr: keep" "stderr: Insecure" >&2; echo "stdout"' \
3>&1 1>&2 2>&3 3>&- | grep -v Insecure 3>&1 1>&2 2>&3 3>&-
</code></pre>
<p>所有这些重定向所做的就是在grep之前和之后交换stdout和stderr两次以恢复它们。让我们看看它是如何工作的:</p>
<ul>
<li>FD 1(原始标准输出)复制到FD 3(作为备份)</li>
<li>FD 2(原始标准)复制到FD 1(因此可以过滤)</li>
<li>fd3(原始stdout的备份)被复制到fd2(现在存储在stderr中)</li>
<li>FD3关闭,因为交换完成后不再需要它。你知道吗</li>
</ul>