2016-10-18 4 views
1

Fetchを使用してTeamcityからURLをダウンロードすると、フェッチに失敗しました!エラー。しかし、ファイルのダウンロードは実際に動作します。Perlのfetch.pmからのエラーメッセージを抑制できますか

最近Teamcityサーバーの権限が変更されたため、ダウンロードするファイルのURLを取得する際にユーザー名とパスワードを使用しました。私はちょうどこれがゲートウェイのフェッチの検証に問題を引き起こしているのだろうかと思っていますが、ファイルをダウンロードすることができます。このエラーを抑制する方法はありますか、それとも警告にダウングレードするだけですか?

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. 
+0

したがって、スクリプトは終了しませんか?それからあなたは警告を受けていますか? '$ SIG {__ WARN __}'をローカライズして制御できます。 – zdim

答えて

0

警告は、STDERRに印刷されているようです。どうやらあなたはdieを得ていないか、プログラムが終了するでしょう。ブロック内で最もローカライズされた$SIG{__WARN__}フックを設定することで、メッセージの印刷プロセスを制御できます。

my $where; 

FETCH: { 

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

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

又は

my $where = do { 
    local $SIG{__WARN__} = sub { print "WARN: @_" }; 
    $ff->fetch; 
}; 

STDERR –に印刷するための信号の配置–はlocalが提供するものであり、ブロックの外側に復元されます。 this in perlsubを参照してください。特に、 "Synopsis"の直後のテキストを参照してください。また、完了したら$SIG{__WARN__} = 'DEFAULT';と言って手動で行うこともできます。

がインストールさ$SIG{__WARN__}ハンドラがある場合、何のメッセージが印刷されませんwarn

を参照してください。メッセージが適切であるとみなして対処するのは、ハンドラーの責任です(たとえば、ダイに変換するなど)。警告メッセージが印刷されようとしているとき

も参照$SIG{__WARN__}によって示さ%SIGエントリin perlvar

ルーチンが呼び出されます。警告メッセージが最初の引数として渡されます。 __WARN__フックの存在は、STDERRへの警告の通常印刷を抑止します。


「エラー」を呼び出すために、どのような「警告」ビット任意でよいものを決定するが、あなたのプログラムだけSTDERRにメッセージを放出し続けていることを明確に表示されます。そうすれば十分でしょう。

dieでヒットした場合は、evalにコードをラップすることができます。

+0

@duskwuff編集をありがとう。私はドキュメントからコピーして、(クリティカルな)部分がフォーマットされていないことに気付かなかった。ありがとうございました! – zdim

0

the documentationが説明するように、単に警告を抑制するために

$File::Fetch::WARN = 0; 

を設定します。

関連する問題