从ftp下载文件时perl超时

时间:2016-04-26 16:23:58

标签: perl ftp

我尝试下载使用perl从ftp链接下载大量时间的大文件。 我得到了:

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

这意味着什么以及如何解决它?

由于

解决方案: 谢谢@Chris Doyle 我更改了perl文件"not ftp.pm file"中的超时值 感谢

1 个答案:

答案 0 :(得分: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 / Net / FTP.pm ,因为   FTP.pm是您正在使用的第三方模块(Kind of library)   到达ftp,我建议你不要触摸它以避免便携性   问题稍后。

通常在FTP.pm内达到超时并进入或打印“有错误”条件,但在某些情况下,服务器/客户端只是不同步并且FTP.pm只会抛出一个未处理的异常。

此异常将 NOT 转到或打印“收到错误”条件,因此您需要捕获它并像处理其他任何语言一样处理它。

在这里,您可以使用eval将代码包装起来,捕获异常并根据需要进行处理。

例如:

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

$ftp->quit();