Я пытаюсь создать сценарий, который взаимодействует с mplayer с помощью open3, но процесс mplayer появляется как несуществующий, и я не могу отправить стандартный ввод в mplayer.Perl и open3. Что мне не хватает?
Вот код:
#!/usr/bin/env perl
{
package mplayer::test;
use IPC::Open3;
sub new {
my $class = shift;
my $self = bless { @_ }, $class;
$self->start_mplayer();
$self;
}
sub start_mplayer{
my $self = shift;
local *DEVNULL;
open DEVNULL, ">/dev/null" or die "/dev/null: $!";
open OUTPUT, ">out.log" or die "out.log: $!";
$self->{r} = local *MPLAYER_READ;
$self->{w} = local *MPLAYER_WRITE;
$self->{pid} = open3($self->{w},$self->{r},">&DEVNULL",'mplayer -slave -idle -v');
die "Error opening mplayer!\n" unless $self->{pid};
}
sub do{
my ($self, $command) = @_;
print {$self->{w}} $command, "\n";
}
}
mplayer::test->new;
mplayer::test->do(qq~loadfile test.mp3~);
sleep(5);
Я должен отсутствовать что-то очевидное, я учусь open3 с примерами из других модулей.
''> & DEVNULL "' должно быть '\ * DEVNULL'? –
Нет, '"> & DEVNULL "' правильно – ikegami
Избавиться от '$ self -> {r} = local * MPLAYER_READ; $ self -> {w} = local * MPLAYER_WRITE; 'Если это не поможет, он по крайней мере избавится от двух бесполезных строк. – ikegami