Question

J'execute (chaîne cmd) dans un script jsp qui appelle la méthode exec de la classe d'exécution.

Il fonctionne quand je l'appelle une commande locale, comme un script php stocké sur le serveur. par exemple: / usr / bin / php / path / to / php / script arg1 arg2

Je suppose que ma commande exécuter est ok, car il travaille avec cela.

Maintenant, quand je tente de lynx d'appel, le navigateur Web basé sur le texte, il ne fonctionne pas.

Si je l'appelle dans un terminal, il fonctionne très bien: / Usr / bin / lynx -dump -accept_all_cookies « http://www.someurl.net/ ? arg1 = 1 & arg2 = 2 '

Mais quand je l'appelle cela de ma commande d'exécution, rien ne se passe ...

Une idée pourquoi?

Ceci est ma méthode d'exécution:

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;

    }
Était-ce utile?

La solution 2

Je l'ai résolu .... en appelant le lynx dans un script php, script php que j'ai appelé à partir du script Jsp ...

Il est une solution merdique, mais au moins ça marche ... Je ne comprends toujours pas pourquoi la commande exec de Java fonctionne de cette façon ...

Merci pour votre aide en tout cas Andrzej (conjecture tchèque I du nom ..? ^ _ ^), En quelque sorte que vous me mettre sur le chemin!

Autres conseils

Vous devez lire à partir du Process » flux de sortie.

Puisque vous n'êtes pas, le processus de lynx sous-jacent est le blocage probable en sortie d'écriture, en attendant que quelqu'un de vider la mémoire tampon du flux de sortie. Même si vous allez ignorer la sortie, vous avez besoin de le lire de toute façon pour le processus d'exécution que vous attendez .

javadocs de processus par exemple, « Parce que certaines plates-formes natives ne fournissent la taille de la mémoire tampon limitée pour les flux d'entrée et sortie standard, le défaut d'écrire rapidement le flux d'entrée ou de lire le flux de sortie du sous-processus peut entraîner la sous-processus au bloc, et même impasse. »

Voir http: //www.javaworld. com / JavaWorld / jw-12-2000 / jw-1229-traps.html quelques exemples de la façon de gérer cela.

Edit: au cas où vous vous demandez, il est probable que lorsque vous invoquez le script PHP, il n'a pas produit beaucoup de la production, et ainsi a pu mettre fin avant de remplir la mémoire tampon de sortie et de blocage. La commande de lynx est produit sans doute plus de puissance et frapper donc cette question.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top