Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > system(). перенаправить вывод


Автор: _hunter 22.11.2007, 15:13
Добрый день.

Подскажите как перенаправить вывод, выдаваемый выполняемой system() командой, в файл.
если делать так:
Код

    my @buildArgs = ("someProgram.exe", "1>>\"$logPath\"");

    system(@buildArgs) == 0
        or die("fail");

-- 1>>... интерпритируется как параметр someProgram.exe :(

С уважением...

Автор: amg 22.11.2007, 15:34
Цитата(_hunter @  22.11.2007,  15:13 Найти цитируемый пост)
1>>... интерпритируется как параметр someProgram.exe
Это потому, что system вызвана с несколькими аргументами. В этом случае твоя someProgram.exe вызывается без посредничества шелла, а перенаправление - это функция шелла. Пробуй так:
Код

my $buildArgs = "someProgram.exe 1>> $logPath";
system($buildArgs) == 0  or die("fail");
Ксати, system возвращает не признак успеха/неуспеха выполнения системной команды, а ее код возврата. Он в случае успеха не обязательно 0, хотя обычно так. Это зависит от самой команды.

Можно также перехватить вывод команды в перл, пропарсить (если надо) и перлом добавить его в файл:
Код

@output = `$buildArgs`;
open my $fh,  '>>', $logPath or die "Can't append to $logPath: $!\n";
print $fh @output;
close $fh;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)