Почему мой Perl-скрипт, который вызывает FTP, внезапно перестает работать? - PullRequest
1 голос
/ 24 мая 2010

У меня есть скрипт, который работал более года, и теперь он не работает:

Он создает командный файл:

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 Ядро: 0

Спасибо за любую помощь / понимание.

1 Ответ

5 голосов
/ 24 мая 2010

Mel - вы можете получить немного больше информации, посмотрев на стандартный вывод ошибок команды ftp.

1) Работает ли команда FTP вручную из командной строки?

2) Если работает командная строка ftp, запишите выходные данные (stdout и stderr) команды ftp и распечатайте ее в сценарии Perl. Чтобы узнать, как это сделать, см. perlfaq8. Как захватить STDERR из внешней команды?

Вот две самые простые аппорации:

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

my $pid = open(PH, "$command 2>&1 |"); 
while (<PH>) { print "Next line from FTP output: $_"; } 

3) Как мудро заметил Снейк Плисскен в комментарии, альтернативный (и более идиоматичный и, возможно, более простой) подход состоит в том, чтобы отменить системный вызов команды "ftp" и вместо этого использовать Net :: FTP Модуль Perl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...