Frage

Ich habe eine execute (String cmd) in einem jsp Skript, das die exec-Methode aus der Runtime-Klasse aufruft.

Es funktioniert, wenn ich einen lokalen Befehl aufrufen, wie ein PHP-Skript auf dem Server gespeichert. zum Beispiel: / usr / bin / php / path / to / php / script arg1 arg2

Also ich denke, mein Befehl ausführen ok ist, da es mit dem funktioniert.

Wenn ich jetzt auf Anruf Luchs versuchen, die textbasierte Web-Browser, es funktioniert nicht.

Wenn ich es in einem Terminal nennen, es funktioniert gut: / Usr / bin / lynx -dump -accept_all_cookies ‚ http://www.someurl.net/ ? arg1 = 1 & arg2 = 2 '

Aber wenn ich das von meinem Befehl ausführen nennen, geschieht nichts ...

Jede Idee, warum?

Das ist meine Methode execute:

public String execute(String cmd){


        Runtime r = Runtime.getRuntime();
        Process p = null;
        String res = "";

        try {
                    p = r.exec(cmd);
                    InputStreamReader isr = new InputStreamReader(p.getInputStream());
                    BufferedReader br = new BufferedReader(isr);
                    String line = null;
                    //out.println(res);
                    while ((line = br.readLine()) != null) {

                    res += line;

                    }
                    p.waitFor();
                    } catch (Exception e) {
                    res += e;
                    }
                    System.out.println(p.exitValue());

        return res;

    }
War es hilfreich?

Lösung 2

Ich löste es .... von Luchs in ein PHP-Skript aufrufen, PHP-Skript, dass ich von der JSP-Skript namens ...

Es ist eine beschissene Lösung, aber zumindest funktioniert es ... Ich weiß immer noch nicht wirklich verstehen, warum der Befehl exec von Java auf diese Weise funktioniert ...

Danke für Ihre Hilfe sowieso Andrzej (Tschechisch Ich denke, aus dem Namen ..? ^ _ ^), Irgendwie setzen Sie mich auf dem Weg!

Andere Tipps

Sie müssen aus dem Process‘Ausgabe-Stream lesen.

Da Sie nicht, die zugrunde liegende Luchs Prozess wahrscheinlich blockiert, während die Ausgabe geschrieben wird, wartet auf jemanden, der Ausgangsstrom-Puffer zu leeren. Auch wenn Sie die Ausgabe ignorieren gehen, müssen Sie es trotzdem für den Prozess lesen auszuführen, wie man es erwarten würde .

Als javadocs von Prozess sagen: „Da einige nativen Plattformen bieten nur einen begrenzten Puffergröße für Standard-Ein- und Ausgangsströme, Ausfall sofort den Eingangsstrom schreiben oder den Ausgangsstrom des subprocess lesen kann den Teilprozess zu Block verursachen und sogar eine Sackgasse.“

Siehe http: //www.javaworld. com / Javaworld / jw-12-2000 / jw-1229-traps.html für einige Beispiele dafür, wie diese zu behandeln.

Edit: falls Sie sich fragen, stehen die Chancen, dass, wenn Sie das PHP-Skript aufgerufen es nicht viel Output produzieren hat, und so konnte die Ausgabepuffer beenden, vor dem Befüllen und zu blockieren. Der Luchs-Befehl wird vermutlich mehr Leistung produzieren und damit dieses Problem zu treffen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top