Pipes unterbrochen

Pipes unterbrochen

am 17.11.2007 01:31:41 von Dirk Zobel

Hallo zusammen,

irgendwie stehe ich auf dem Schlauch.

In einem Skript soll das Programm sox aufgerufen werden und mir einen
Parameter zurückgeben, den ich in einer Variable speichern möchte. Leider
bleibt die Variable immer leer. Folgende Wege habe ich probiert:

#!/usr/bin/perl -w
$| = 1;
open(PIPE, "sox $Spoolfiles/tmp.wav -e stat -v|");
my(@Volume_Zeilen) = ;
close(PIPE);
$| = 0;
my $Volume = $Volume_Zeilen[1];

alternativ:
my $Volume = `sox $Spoolfiles/tmp.wav -e stat -v`;

$Volume ist leider immer leer (""). Starte ich allerdings das Skript,
gibt sox allerdings sein Ergebnis auf der Konsole aus, von der das Skript
gestartet wurde. Das Ergebnis ist also da, sox arbeitet richtig, nur Perl
speichert es nicht. Wie bekomme ich das Ergebnis nun in die Variable?

Danke für Antworten,

Dirk

Re: Pipes unterbrochen

am 17.11.2007 08:52:07 von mlelstv

Dirk Zobel writes:

>$Volume ist leider immer leer (""). Starte ich allerdings das Skript,
>gibt sox allerdings sein Ergebnis auf der Konsole aus, von der das Skript
>gestartet wurde. Das Ergebnis ist also da, sox arbeitet richtig, nur Perl
>speichert es nicht. Wie bekomme ich das Ergebnis nun in die Variable?

Die Ausgabe landet auf stderr, also:

my $Volume = `sox $Spoolfiles/tmp.wav -e stat -v >/dev/null 2>&1`;

--
--
Michael van Elst
Internet: mlelstv@serpens.de
"A potential Snark may lurk in every tree."

Re: Pipes unterbrochen

am 17.11.2007 11:40:17 von Dirk Zobel

Hallo Michael,

>> [Skript mit sox als Bashaufruf speichert Ergebnis nicht in Variable
>> $Volume]

> Die Ausgabe landet auf stderr, also:
>
> my $Volume = `sox $Spoolfiles/tmp.wav -e stat -v >/dev/null 2>&1`;

Danke für die Antwort. Es war genau richtig, so komme ich an die Ausgabe
heran. Manchmal sieht man den Wald vor lauter Bäumen nicht. Nun muß nur
noch das >/dev/null raus (sonst wird die Ausgabe ganz vernichtet), und
schon läuft die Sache.

Super - und Vielen Dank.

Dirk

Re: Pipes unterbrochen

am 17.11.2007 13:03:10 von mlelstv

Dirk Zobel writes:

>Hallo Michael,

>>> [Skript mit sox als Bashaufruf speichert Ergebnis nicht in Variable
>>> $Volume]

>> Die Ausgabe landet auf stderr, also:
>>
>> my $Volume = `sox $Spoolfiles/tmp.wav -e stat -v >/dev/null 2>&1`;

>Danke für die Antwort. Es war genau richtig, so komme ich an die Ausgabe
>heran. Manchmal sieht man den Wald vor lauter Bäumen nicht. Nun muß nur
>noch das >/dev/null raus (sonst wird die Ausgabe ganz vernichtet), und
>schon läuft die Sache.


Stimmt, da sollte stehen:

>> my $Volume = `sox $Spoolfiles/tmp.wav -e stat -v 2>&1 >/dev/null`;

dann weisst du, dass du nur stderr siehst. Bei -e stat sollte das aber
egal sein.

--
--
Michael van Elst
Internet: mlelstv@serpens.de
"A potential Snark may lurk in every tree."