我有一个已经运行了一年多的脚本,现在它失败了:
正在创建一个命令文件:
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
感谢您的帮助/见解。
答案 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模块。