Perl-Internetcrawler läuft unter Java nicht richtig

snoopysalive

Mitglied
Hallo!

Klingt jetzt komisch, ist aber so: Ich muss 'ne Java-Applikation schreiben, die ein Perl-Script startet und dessen Ergebnisse dann durch den User Java-intern weiterverarbeitet werden.

Das Problem: Das Perl-Script ist ein stark erweiterter Internetcrawler, greift also aufs Netzwerk zu. Standalone klappt das Script wie 'ne Eins, aber sobald es per Runtime-Aufruf unter Java gestartet wird, funktioniert die Netzwerkkommunikation nicht mehr.

Ja, auch mir wär's lieber, wenn ich den Crawler einfach in Java implementieren würde, aber meine Kommilitonen können eben nur Perl, sodass die eigentliche Programmlogik im Perl-Script bleiben muss.

Wie dem auch sei. Ich verwende folgenden Aufruf, um das Perl-Script in Java auszuführen:
Java:
Runtime runtime = Runtime.getRuntime();
String cmd = "perl DASSCRIPT.pl";
try {
    Process p = runtime.exec(cmd);
    p.waitFor();
    /* Und nun wird was mit den Ergebnissen gemacht */
} catch (Exception e) {
    e.printStackTrace();
}

Weil es sich noch um eine Entwicklungsversion handelt, geht Java einfach davon aus, dass das Perl-Script korrekterweise im gleichen Ordner liegt.

Jedenfalls habe ich durch Herumprobieren herausgefunden, dass Java die Ausführung des Perl-Scripts immer dann versaut, wenn Perl das erste Mal aufs Netzwerk zugreift. Ich habe den Error-Stream und den normalen Input-Stream des verwendeten Process-Objekts ausgeben lassen und mit der Ausgabe des Perl-Scripts im Standalone-Betrieb verglichen: Je nachdem, ob "waitFor()" verwendet wird oder nicht, killt Java Perl direkt bevor der Netzwerkzugriff erfolgt bzw. setzt dessen Ausführung nicht fort, sondern friert Perl ein. Jedenfalls spuckt mir Java keinerlei Fehlermeldung aus, was meine Verwirrung nicht gerade mildert.

An was kann das liegen? Unterbindet Java jeden Netzwerkzugriff, der von einem externen Programm durchgeführt wird, sobald man dieses in Java ausführt? Wenn ja, kann man diesen Mechanismus irgendwie deaktivieren?

Danke,
Matthias
 
Zurück