为什么我的调用FTP的Perl脚本突然失败了?

时间:2010-05-24 13:35:39

标签: perl system

我有一个已经运行了一年多的脚本,现在它失败了:

正在创建一个命令文件:

open ( FTPFILE, ">get_list");
print FTPFILE "dir *.txt"\n";
print FTPFILE "quit\n";
close FTPFILE;

然后我运行系统命令:

$command = "ftp ".$Server." < get_list | grep \"\^-\" >new_list";
$code = system($command);

检查的逻辑:

if ($code == 0) {

do stuff
} else {
log error
}

正在记录错误。当我打印$ code变量时,我得到256。

我用这个命令来解析$?变量:

$exit_value  = $? >> 8;
$signal_num  = $? & 127;
$dumped_core = $? & 128;

print "Exit: $exit_value Sig: $signal_num Core: $dumped_core\n";

结果:

退出:1 Sig:0 Core:0

感谢您的帮助/见解。

1 个答案:

答案 0 :(得分:5)

Mel - 您可以通过查看ftp命令的标准错误输出获得更多信息。

1)FTP命令是否可以在shell提示符下手动工作?

2)如果命令行ftp有效,则捕获ftp命令的输出(stdout stderr)并将其打印在Perl脚本中。有两种方法,请参阅perlfaq8 - How can I capture STDERR from an external command?

最简单的两个方法是:

my $output = `$command 2>&1`; 

my $pid = open(PH, "$command 2>&1 |"); 
while (<PH>) { print "Next line from FTP output: $_"; } 
3)正如Snake Plissken在评论中明智地指出的那样,替代(更惯用且可能更容易)的方法是废弃系统调用“ftp”命令,而是使用Net::FTP Perl模块。