Alinghi: Ein-/Ausgabe anderes Programm

Hi,

ich hab das Problem, dass ich ich gerne den Output eines Programmes hätte, diese jedoch zuvor eine "Enter" benötigt und ich jetzt nicht weiss, wie ich das gelöst bekommes.

Folgendes hab ich versucht
1.)
open(Y, "/opt/Y -refer |");
while (<Y>) {
print $1;
}
close (Y)

Problem: Ich muss das "Enter" manuell eingeben.

2.)
open(Y, "/opt/Y -refer |");
print Y "\n";
while (<Y>) {
print $1;
}
close (Y)

Problem: Ich muss das "Enter" immernoch manuell eingeben.

3.)
open(Y, "| /opt/Y -refer");
while (<Y>) {
print $1;
}
close (Y)

Problem: Das "Enter" wird zwar automatisch gegeben, jedoch ist der Output nicht in meiner Schleife, sondern wird auf STDOUT des Progeammes Y gegeben, d.h. ich kann die Daten nicht verarbeiten.

Hat jemand eine Idee?
Danke.

ciao,
Harry

  1. Hi,

    das "print $1" ist ein "print $_".

    ciao,
    Alinghi

  2. open(Y, "/opt/Y -refer |");

    Du öffnest eine nur lesende Pipe und kannst deshalb nichts reinschreiben, also auch kein „Enter“.

    open(Y, "| /opt/Y -refer");

    Du öffnest eine nur schreibende Pipe, kannst also zwar Dein „Enter“ schreiben, die Ausgabe des Programmes landet aber in STDOUT (Konsole oder wo auch immer).

    Hat jemand eine Idee?

    Schau Dir mal perlipc  und dazu das Modul IPC::Open2 an. Das Problem ist nämlich, dass Du mit dem pipe-Symbol nur entweder lesend oder schreibend auf einen Prozess zugreifen kannst, Du brauchst aber beide Richtungen.

    Siechfred

    --
    Hinter den Kulissen passiert viel mehr, als man denkt, aber meistens nicht das, was man denkt.
    1. Hi,

      hab es jetzt mir Unixmitteln gelöst, da mir das andere doch
      etwas zu kompliziert ist ...
      open(Y, "/opt/Y -refer << "\n" |");
      thx

      ciao,
      Alinghi