Perl - Как использовать дескриптор процесса, созданный в модуле в другом скрипте Perl - PullRequest
0 голосов
/ 10 июня 2010

В конечном итоге я хочу запустить процесс в модуле и проанализировать вывод в реальном времени в другом сценарии.

Что я хочу сделать:

  • Открыть обработчик процесса (IPC)
  • Используйте этот атрибут вне Модуль

Как я пытаюсь это сделать и терпеть неудачу:

  • Открыть обработчик процесса
  • Сохранить обработчик в модуле атрибут
  • Использовать атрибут вне модуля.

Пример кода:

#module.pm

$self->{PROCESS_HANDLER};

sub doSomething{
  ...
  open( $self->{PROCESS_HANDLER}, "run a .jar 2>&1 |" );
  ...
}


#perlScript.pl

my $module = new module(...);
...
$module->doSomething();
...
while( $module->{PROCESS_HANDLER} ){
  ...
}

Ответы [ 2 ]

3 голосов
/ 10 июня 2010

package Thing;
use Moose;
use IO::Pipe;

has 'foo' => (
    is      => 'ro',
    isa     => 'IO::Handle',
    default => sub {
        my $handle = IO::Pipe->new;
        $handle->reader('run a .jar 2>&1'); # note, *no* pipe character here
        return $handle;
    });

1;

package main;
use Thing;
my $t = Thing->new;
say $t->foo->getlines;
2 голосов
/ 10 июня 2010

В вашем while утверждении отсутствует итератор readline, с одной стороны:

while( < {$module->{PROCESS_HANDLER}} > ) { ...

или

while( readline($module->{PROCESS_HANDLER}) ) { ...
...