IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

invocation de commande shell


Sujet :

Java

  1. #1
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 161
    Par défaut invocation de commande shell
    bonjour,

    je souhaite invoquer une commande shell depuis mon programme java. Pour info, mon OS est une debian etch, j'utilise la jvm et le jdk de sun en version 6, packagés par les gens de debian.
    Ce que j'utilise, c'est donc un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().exec(command);
    C'est très bien, seulement, le programme que je veux invoquer est un 'at'... pour planifier une exécution plus tard. Le problème c'est que 'at' ne sait lire des commandes que sur l'entrée standard ou dans un fichier. Ca m'embete un peu d'écrire ma commande dans un fichier à chaque fois que je veux invoquer quelque chose, je voudrais utiliser l'entrée standard. Ce que j'ai donc fait, c'est utiliser une redirection avec un echo :

    echo "echo hello > /tmp/test.log 2>&1" | at now + 1 minute

    Cette commande fonctionne bien directement dans bash, mais lorsque j'exécute cette commande avec le runtime...exec() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                Runtime.getRuntime().exec("echo \"echo hello > "
                    + "/tmp/test.log 2>&1\" | at now + 1 minute");
    mon fichier /tmp/test.log reste vide.

    Je pense qu'il doit y avoir un petit soucis avec les pipes et les redirections de flux standards, ça ne doit pas etre possible, tout du moins aussi facilement...

    Il s'agit finalement autant d'une question système que d'une question java...

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Runtime.exec() lance un programme, pas une ligne de commande. Ce n'est pas un shell. Donc les redirections, pipes, etc. ne fonctionne logiquement pas...

    Si tu veux faire cela il faut appeler /bin/sh et lui passer la ligne de commande en paramètre.

    Sinon tu peux simplement utiliser getOutputStream() du Process créé pour communiquer avec son stdin. D'ailleurs je rappelle que lorsqu'on lance un process, il faut impérativement traiter ses flux d'entrées/sorties (ou au moins les fermer).


    Pour plus d'info tu peux jeter un coup d'oeil à ces articles :


    a++

  3. #3
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 161
    Par défaut
    Merci beaucoup pour ces précisions, en effet je n'y étais pas...
    D'ailleurs en parcourant le forum, je viens de voir qu'il y avait une API quartz qui permet de planifier des taches, dans une application web entre autres. Ce serait peut-être aussi simple que je l'utilise... Mais mon idée c'était simplement d'utiliser une application web java comme un "relai" pour passer des commandes natives. Je mets relai entre guillements car je ne comptais pas donner la commande complète en paramètre à ma servlet, mais juste un identifiant unique puis injecter cet identifiant unique dans ma commande shell.

    Merci encore

Discussions similaires

  1. [Système]Execution d'une commande shell
    Par n8ken dans le forum API standards et tierces
    Réponses: 24
    Dernier message: 29/03/2007, 04h36
  2. []Commande shell
    Par phoenix736 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 09/10/2005, 20h31
  3. [Debutant] Commande shell
    Par drosophile dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 21/04/2005, 15h06
  4. commande shell dans un programme
    Par diefo dans le forum C
    Réponses: 3
    Dernier message: 15/08/2003, 13h37
  5. [VB6] comment savoir si la commande shell est terminée ?
    Par ghyscharlotte dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/07/2003, 19h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo