|
发表于 2012-1-29 15:56:47
|
显示全部楼层
Post by lelecool;2158812
关于perl的Net::FTP,假如以下的
ftp->get($remotefile, $fhandle) 语句执行,
文件下载过程中发生了超时,perl程序自身会中断执行。结果如下:
[代码片段]
------------------------------------------
my $ftp = Net::FTP->new($host);
if (not $ftp) {
exit 3;
}
if (not $ftp->login($user, $passwd)) {
exit 3;
}
$ftp->binary();
if ($remotedir ne "") {
if (not $ftp->cwd($remotedir)) {
$ftp->quit();
exit 3;
}
}
$ftp->hash(\*STDERR);
if ($ftp->get($remotefile, $fhandle)) { ★
$ftp->quit();
exit 0;
}
------------------------------------------
[执行例]
------------------------------------------
bash-3.2# ftpget.pl ftp://user:password@192.168.2.1/test.tgz test.tgz
bash-3.2# Timeout at /usr/lib/perl5/5.8.8/Net/FTP.pm line 503
bash-3.2# echo $?
2 ★ perl程序的返回值是2?
bash-3.2#
------------------------------------------
从代码上看,应该是read动作时发生了超时,
在I.pm中通过croak函数返回.
if ($size > length ${*$data} and !${*$data}{'net_ftp_eof'}) {
$data->can_read($timeout)
or croak "Timeout"; ★
但有哪位大侠知道执行时的返回值2是在哪里设置的么?
(试了在perl脚本里显式的执行croak函数,执行的返回值是255)
一个良好的编程习惯就是调用模块中的内容的时候同时有一个die
这样就可以知道是那步出错了,你的代码只有部分,看不出问题 |
|