Programm ausführen aber Rückgabe per Filehandle

Grüße euch, folgendes Problem bei welchem ich inzwischen an meine Grenzen gestoßen bin:

Übersicht:
Per Perl möchte ich ein externes Unix-Programm aufrufen und die Ausgabe dieses Programms weiterverwenden.

Im Detail und die Schwierigkeit dabei:
Das externe Programm aufzurufen und die Ausgabe zu verwerten wäre einfach:
my $ret = programm param1;

Doch nun hat dieses verflixte externe Programm zwei Parameter.
Erstes: ist ein Dateiname welches verarbeitet werden soll und
Zweites: ist der Dateiname, unter dem die Verarbeiteung gespeichert werden soll.

Eine Bildschirmausgabe des Ergebnisses erfolgt nicht, sondern wird in die Datei gespeichert, welche ich im zweiten Parameter angebe.

Auf DOS Basis konnte ich mit dem Trick „programm datei1 con:“ die Anwendung austricksen und die Ausgabe auf den Bildschirm umleiten.

Doch das Problem stellt sich nun unter Unix.

Natürlich könnte ich zuerst die Datei speichern lassen, dann die Ergebnisdatei wieder in Perl einlesen und weiterarbeiten. Doch genau diesen Schritt möchte ich umgehen.

Hat jemand vielleicht eine Idee?

Ach, dem Programm als Dateiname ein &1 (stdout) unterzujubeln schlug leider auch fehl.

Hallo

Per Perl möchte ich ein externes Unix-Programm aufrufen und
die Ausgabe dieses Programms weiterverwenden.

IPC::open3
=> http://perldoc.perl.org/IPC/Open3.html
=> http://search.cpan.org/~nwclark/perl-5.8.9/lib/IPC/O…
=> http://docstore.mik.ua/orelly/perl/prog3/ch32_31.htm

Grüße

CMБ

vergessen: ‚Programm erwartet Dateinamen‘
… dann mußt Du eine ‚read pipe‘
öffnen, und das Programm muß das
auch verstehen => Unix-Konvention: ‚|‘

Du bringst das Programm faktisch dazu,
in das file ‚STDOUT‘ zu schreiben, von
dem Du dann (über Pipe) liest.

siehe: http://hell.org.ua/Docs/oreilly/perl3/cookbook/ch16_…

Um welches Programm handelt es sich?

Grüße

CMБ

Du bringst das Programm faktisch dazu,
in das file ‚STDOUT‘ zu schreiben, von
dem Du dann (über Pipe) liest.

siehe:
http://hell.org.ua/Docs/oreilly/perl3/cookbook/ch16_…

Um welches Programm handelt es sich?

Hi und danke erstmal deines Vorschlags, schau ich mir mal genauer an. mit dem einfachen OPEN (DAT,„programm inputdatei |“); hatte ich es auch probiert, ebenfalls fehlgeschlagen.

Es ist ein Consolenprogramm, welches eine PDF Datei als ASCII speichert. Eben in der Datei, welche als zweiter Parameter angegeben wird.

Ich melde meinem (Miss)Erfolg. Danke!

Hallo

Es ist ein Consolenprogramm, welches eine PDF Datei als ASCII
speichert. Eben in der Datei, welche als zweiter Parameter
angegeben wird.

Ein normales ‚pdftotext‘ (xpdf)
schreibt das Resultat nach STDOUT,
wenn man keine Datei sondern
ein ‚-‘ als letzten Parameter
angibt.

$\> pdftotext -f 1 -l 1 mein.pdf - \>ausgabe.txt

Grüße

CMБ

Ein normales ‚pdftotext‘ (xpdf)
schreibt das Resultat nach STDOUT,
wenn man keine Datei sondern
ein ‚-‘ als letzten Parameter
angibt.

Omfg. Ich habe die Lösung…

Es ist das Programm „XPDF“:
http://www.foolabs.com/xpdf/

Nach einem googler fand ich folgende Seite:
http://www.informatik.uni-hamburg.de/RZ/netz/drucken…
Ausschnitt von Aufrufen:
acroread -toPostScript -size a4 paper.pdf | lpr -Pd105_hp
pdf2ps paper.pdf - | lpr -Pd105_hp

Das brachte mich auf die Idee, mal folgenden Syntax zu versuchen:
„programm datei.pdf - |“, bisher versuchte ich es immer so:
„programm datei.pdf |“

Nunja, dieser kleine Bindestrich der aber auch nirgendwo in einer Doku auftaucht, war der Fehler. Nun funktioniert es tadellos.

Danke dir für deine Mühe!