如何抑制来自Python调用的所有Fish错误输出?

问题描述

我想用Fish shell遍历Python虚拟环境,并打印一个两列的表,在括号中显示(1)虚拟环境名称和(2)该环境的Python版本:

ansible                (3.7.7)
cookiecutter           (3.7.8)
pelican                (3.7.8)
tempenv-0f20326801926  (broken)
tempenv-1b0a326016370  (3.8.5)
wagtail                (broken)

在给定环境中运行python --version通常会产生其版本号。但是,如果符号链接的Python解释器不再存在,将返回如下错误:

dyld: Library not loaded: @executable_path/../.Python
Referenced from: /Virtualenvs/tempenv-0f20326801926/bin/python
Reason: image not found
fish: '/Virtualenvs/tempenv-0…' terminated by signal SIGABRT (Abort)

在后一种情况下,虚拟环境已损坏,因此我想在禁止所有错误输出的同时将Python版本号设置为broken,以便用户仅看到打印的表,而不看到错误。 / p>

我能够通过以下节取消上述错误输出的前三行,但不能取消第四行:

begin; pushd $VIRTUALENV_HOME; and set -e dirprev[-1]; end
for i in */bin/python
    set -l python_version
    if test -x "$VIRTUALENV_HOME/$i"
        set -l test_python ("$VIRTUALENV_HOME/$i" -V >/dev/null 2>/dev/null)
        if test $status -eq 0
            set python_version ("$VIRTUALENV_HOME/$i" -V | string split " ")[2]
        else
            set python_version broken
        end
    else
        set python_version broken
    end
    printf "%-33s (%s)\n" $i $python_version
end | sed "s|/bin/python||"
begin; popd; and set -e dirprev[-1]; end

但是请尝试,但我无法弄清楚如何禁止fish: '[…]' terminated by signal SIGABRT (Abort)行:

ansible                (3.7.7)
cookiecutter           (3.7.8)
pelican                (3.7.8)
fish: Job 4,'"$VIRTUALFISH_HOME/$i" -V >/dev…' terminated by signal SIGABRT (Abort)
tempenv-0f20326801926  (broken)
tempenv-1b0a326016370  (3.8.5)
fish: Job 4,'"$VIRTUALFISH_HOME/$i" -V >/dev…' terminated by signal SIGABRT (Abort)
wagtail                (broken)

如何改善上述节并从打印表中消除无用的错误消息?

解决方法

要注意的是,您无法抑制的错误来自执行脚本的shell。失败的python命令未编写该文件。解决方案是使用另一个Shell级别,以便您可以从该Shell抑制该作业控制错误消息,同时仍捕获您感兴趣的命令的标准输出:

Shift_Availabilities = [
(1,2,3),(3,3,(0,1,2),1)
]

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...