LINUX.ORG.RU

Perl, перенаправить STDOUT дочернего процесса

 , ,


0

1

Привет,

Есть код, который запускает дочерний процесс и должен перенаправить вывод созданного процесса в файловый дексриптор (может быть сокет). Код выглядит приблизительно так:

use IPC::Open3;
use Symbol qw(gensym);

sub redirect {
    my ($command, $handle) = @_;

    my ($stderr, $stdin) = (gensym, undef);
    # вот тут STDOUT дочернего процесса должен открыться в $handle
    my $pid = open3($stdin, $handle, $stderr, @{$command});
    waitpid($pid, 0);
   
    die 'Child error' if ($?);
}

Никаких требований к внутренней имплементации нет (IPC::Open3, IPC::Run, Whatever). Подскажите пожалуйста как сделать

Файловые дескрипторы наслеюуются. Поэтому сохранить stdout, переоткрыть stdout куда надо, форкнуться, вернуть stdout как было.

slovazap ★★★★★ ()
Ответ на: комментарий от slovazap

Да, єто хорошая идея, вот только придется свой open3 писать :) То есть fork/exec там уже делается.

Сейчас не пойму, как достигнуть эффекта \*CHILD_OUT, (как описано в документации: http://perldoc.perl.org/IPC/Open3.html), но используя скаляр а не bareword (ибо в функцию извне приходит линь скаляр).

По идее IPC::Run должен уметь то, что я хочу.

KennyMinigun ★★★★★ ()
Ответ на: комментарий от KennyMinigun

вот только придется свой open3 писать :)

Зачем? Делай до/после open3.

slovazap ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.