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."