首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在Perl中从fetch.pm中禁止错误消息吗?

我可以在Perl中从fetch.pm中禁止错误消息吗?
EN

Stack Overflow用户
提问于 2016-10-18 15:46:57
回答 2查看 188关注 0票数 1

当使用Fetch从Teamcity下载一个url时,我获得了一个Fetch失败!错误。但是文件的下载实际上是可行的。

他们最近改变了我们Teamcity服务器的权限,所以在获取要下载的文件的URL时,我必须使用用户名和密码。我只是想知道这是否导致了对Gateway的fetch验证的问题,但是我可以下载这个文件。是否有一种方法来抑制此错误或只是将其降级为警告?

代码语言:javascript
复制
Perl Code:
my $ff = File::Fetch->new(uri => "$uri"); 
my $where = $ff->fetch   ( to => "$DOWNLOAD_LOCATION" );
print Dumper($ff);

Output:    
Fetch failed! HTTP response: 502 Bad Gateway [502 notresolvable] at         
<path>\myfile.pl line 249.

Dumper Output:
$VAR1 = bless( {'vol' => '',
                'file_default' => 'file_default',
                '_error_msg' => 'Fetch failed! HTTP response: 502 Bad Gateway [502 notresolvable]',
                'file' => 'myfilename.zip',
                'scheme' => 'http',
                'path' => '/repository/download/buildlabel/1042086:id/',
                '_error_msg_long' => 'Fetch failed! HTTP response: 502 Bad    Gateway [502 notresolvable] at C:/Perl/lib/File/Fetch.pm line 598.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-18 17:02:01

问题似乎是一个警告(消息)正在打印到STDERR。显然,您没有得到一个die或程序将退出。您可以通过设置$SIG{__WARN__}钩子来控制打印消息的过程,最好是在块中本地化。

代码语言:javascript
复制
my $where;

FETCH: {

    local $SIG{__WARN__} = sub { 
        print "WARN: @_";        # or whatever appropriate
    };

    $where = $ff->fetch   ( to => "$DOWNLOAD_LOCATION" );    
};

代码语言:javascript
复制
my $where = do { 
    local $SIG{__WARN__} = sub { print "WARN: @_" };
    $ff->fetch;
};

信号的处理--打印到STDERR --在块之外恢复,这是local提供的。参见这个在perlsub,特别是“概要”后面的文本。您也可以通过在完成后说$SIG{__WARN__} = 'DEFAULT';来手动完成这一操作。

请参阅警告

如果安装了$SIG{__WARN__}处理程序,则不会打印任何消息。处理程序有责任处理它认为合适的消息(例如,将其转换为模具)。

还请参阅%SIG entry 在perlvar

当要打印警告消息时,将调用由$SIG{__WARN__}指示的例程。警告消息作为第一个参数传递。__WARN__钩子的存在会导致对STDERR的警告的普通打印被抑制。

虽然决定什么叫“错误”和什么“警告”可能有点武断,但很明显,您的程序只向STDERR发出一条消息并继续进行。那么,以上所述就足够了。

如果您被die击中,那么您可以将代码包装在评估中。

票数 0
EN

Stack Overflow用户

发布于 2016-10-18 23:16:59

正如文献资料解释的,只需设置

代码语言:javascript
复制
$File::Fetch::WARN = 0;

来压制警告。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40112681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档