2016-04-26 20 views
0

私は、perlを使ってftpリンクからダウンロードする時間がかかっている膨大なファイルをダウンロードしようとします。 私が得た:ftlからファイルをダウンロードするときのperlタイムアウト

Timeout at C:/Strawberry/perl/lib/Net/FTP.pm 

これが意味ないものをとそれを解決するためにどのように?

おかげ

ソリューション: おかげで、私は、ファイルが読み取り可能であるかどうか、あなたが続けるループがファイルを追跡しながら使用して私のperlのファイルに"not ftp.pm file" おかげ

+0

あなたは問題を自分で解決しようとする何をしましたか?おそらく "タイムアウト"を探して、Net :: FTPのドキュメントを見ましたか? http://search.cpan.org/~shay/libnet-3.08/lib/Net/FTP.pm – Mort

+0

タイムアウトという単語のドキュメントを見ると、最初に表示されるのは 'タイムアウト - 秒単位のタイムアウト値を設定することです(デフォルトは120)ですので、ファイルがダウンロードに120秒以上かかる場合は、ftpを開始する前にタイムアウト値を変更する必要があります。 –

+0

@Mort私のコンピュータでftp.pmを開き、タイムアウト変数を探します: Timeout => $ ftp-> timeout '構文の変更方法を知りたいのですが、提案された値は何ですか?私は理解できないもので遊びたくありません。 – sara

答えて

0

をタイムアウト値を変更 @クリス・ドイルない。 それ以外の場合は、WHILEループを続行する値を設定します。ファイルが読み込み可能になると、ファイルは完全にダウンロードされ、次の行を実行することができます。これはタイムアウトの問題を解決する1つの方法です。

0

タイムアウトを長くすることはできますが、タイムアウトにもう一度なり、サーバー/クライアントが同期していない場合は、初めて同じエラーが発生する可能性があります。

あなたのPerlスクリプトではエラー処理が不足していると思われます。

きっとあなたのperlスクリプトでこのようなものを持っている:

my $ftp = Net::FTP->new($myhost, Timeout => 10, Debug => 1); 
... 
$ftp->get($myfile) or print "Got an error"; 
$ftp->quit(); 

これはの外にある注意してください.../perlの/ libに/ FTP以来、ネット/ FTP.pm、 .pmは第三者モジュール(Kind of library)で、 に到達しています。移植性を避けるために触れないことをお勧めします。 後で問題が発生します。サーバ/クライアントだけで同期してから抜け出すこと、

は通常、タイムアウトはFTP.pm内に到達すると、それは条件「エラーを得た」 または印刷になりますが、いくつかのケースがありますFTP.pmは未処理の例外をスローします。

この例外は、または印刷に行くことはありません条件「エラーを得た」、したがって、あなたはそれをキャッチし、他の言語としてそれを処理する必要があります。

ここではevalを使用してコードを包み込み、例外をキャッチして必要に応じて処理できます。例えば

my $ftp = Net::FTP->new($myhost, Timeout => 10, Debug => 1); 
... 
eval {$ftp->get($myfile) or print("Can't get file $myfile") }; 
if ([email protected] =~ /Timeout/) { 
    print "Got a timeout Issue: [email protected]"; 
} 

$ftp->quit(); 
関連する問題