Transmettre des données dans une fenètre DOS

pagoda Messages postés 14 Date d'inscription lundi 9 mars 2009 Statut Membre Dernière intervention 17 décembre 2012 - 9 mars 2009 à 14:44
meli82 Messages postés 4 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 28 avril 2009 - 27 avril 2009 à 14:02
Bonjour,

j'ai un souci par rapport à l'affichage d'un résultat dans une fenêtre DOS.

Voila le but du travail que je dois faire est de développer une
interface Java qui, lorsqu'on lance la simulation, fait exécuter un
programme .exe écrit en Fortran.


Lorsque je lance la simulation la fenêtre dos dans laquelle s'exécute
l'exe s'affiche correctement seulement voila pour que la simulation se
lance il faut saisir dans la fenêtre dos le nom de la simulation
souhaitée (qui correspond à un fichier .dat).

Ce que je souhaite faire c'est automatisée cela, c'est à dire que la
saisie d'un fichier se fasse automatiquement, que l'utilisateur n'ai
pas à le faire à chaque fois.

Pour cela j'ai écrit le code ci-dessous:

 
String cmd3 ="cmd /c cmd.exe /k "cd c:\"+Constantes.adresse2+"&&truc.exe < learn.data"";
 
Runtime r2 = Runtime.getRuntime();
p2= r2.exec(cmd3);

remarque:

-p2 correspond à un objet Process

-learn.data est un fichier dans lequel est écrit le nom de la
simulation qui doit être saisie dans le dos de truc.exe pour que la
simulation se lance


En espérant que vous avez compris mon problème et que vous avez des réponses à m'apportez je vous remercie d'avance

9 réponses

dje_jay Messages postés 58 Date d'inscription mercredi 17 décembre 2003 Statut Membre Dernière intervention 16 février 2011 2
9 mars 2009 à 15:26
Je ne sais pas si j'ai bien compris, mais pour ce qui est d'envoyer des données à un process qui tourne :

           Runtime r;

           r = Runtime.getRuntime();

           Process p = r.exec(args);
...
           is=p.getInputStream();
           es=p.getErrorstream();
           os=p.getOutputStream();
...
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Process.html
0
pagoda Messages postés 14 Date d'inscription lundi 9 mars 2009 Statut Membre Dernière intervention 17 décembre 2012
11 mars 2009 à 13:32
Re-bonjour je viens d'utiliser les fonctions que tu m'as indiqué et j'ai généré le code suivant:

Runtime r = Runtime.getRuntime();
                p= r.exec(cmd);
               
               
                String s=PanneauSimExist.a.toString().substring(9,
                        PanneauSimExist.a.toString().length()-4);

                  //la  variable s contient le message que je souhaite envoyer dans l'éntrée standard du programme .exe

                 byte[] buf = new byte[s.length()];
                 
                 for(int i=0;i<s.length();i++)
                 {
                     buf[i]=(byte)s.charAt(i);
                 }
                 InputStream is=p.getInputStream();
                
                 is.read(buf);
        
                 is.close();

Seulement voila rien ne se passe, le .exe s'affiche dans une fenêtre dos mais rien n'est entré dans l'entrée dans standard
0
dje_jay Messages postés 58 Date d'inscription mercredi 17 décembre 2003 Statut Membre Dernière intervention 16 février 2011 2
11 mars 2009 à 14:35
Faut envoyer tes strings en OutputStream avant de lire l'InputStream...
Voici un petit exempel bidon :

Code pour générer l'executable :
#include

using namespace std;

int main()
{
    string name;
    cout << "Entrez votre nom :";
    cin >> name;
    cout << endl << "Bonjour " << name << endl;
    return 0;
}

Code pour appeler l'executable :
public class PassInfo
{
    public void run()
    {
        try
        {
            Runtime r;
            r = Runtime.getRuntime();
            Process p = r.exec("E:\\dje\\src\\cpp\\HWconsole\\bin\\Debug\\HWconsole.exe");

            OutputStream os=p.getOutputStream();
            BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(os, "UTF8"));
            wr.write("dje\n");
            wr.flush();
            os.flush();

            InputStream is=p.getInputStream();
            int num=is.read();
            while(num>-1)
            {
                System.out.print((char)num);
                num=is.read();
            }//endw

        } catch (IOException ex)
        {
        }
    }//endmeth

    public static void main(String[] args)
    {
        PassInfo p=new PassInfo();
        p.run();
    }//endmeth
}//endclass

En espérant que ça aide...
0
pagoda Messages postés 14 Date d'inscription lundi 9 mars 2009 Statut Membre Dernière intervention 17 décembre 2012
11 mars 2009 à 14:57
Je viens de modifier mon code comme ceci:

Runtime r = Runtime.getRuntime();
                p= r.exec(cmd);
               
                OutputStream os=p.getOutputStream();
                BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(os, "UTF8"));
                wr.write("1dc-react-a\n");
                wr.flush();
                os.flush();

                InputStream is=p.getInputStream();
                int num=is.read();
                System.out.println("ESSAI");
                while(num>-1)
                {
                    System.out.print((char)num);
                    num=is.read();
                }

Malhauresement ca ne marche toujours (pire ca fais planter mon programme java :S ). C'est vraiment la galère le .exe je ne peux pas le modifier directement. Juste pour info le .exe représente un programme écrit en fortran je sait pas si c'est important de le signaler mais au moins tu le sais.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pagoda Messages postés 14 Date d'inscription lundi 9 mars 2009 Statut Membre Dernière intervention 17 décembre 2012
11 mars 2009 à 15:33
J'ai remarqué également au niveau de l'affichage effectué à la fin du code les lignes suivantes:

ESSAI

C:\MIN3P>1dc-react-a

C:\MIN3P>

Du coup j'ai l'impression qu'au lieu d'écrire dans la fenètre dos de l'exe il écrit dans l'invite de commande qui lance l'exe
(String cmd3 ="cmd /c cmd.exe /k "cd c:\"+Constantes.adresse2+"&&truc.exe < learn.data"")
0
pagoda Messages postés 14 Date d'inscription lundi 9 mars 2009 Statut Membre Dernière intervention 17 décembre 2012
11 mars 2009 à 16:17
C'est bon j'ai réussi :D
En fait j'ai fait une bidouille en enregistrant avant les données à envoyer dans un fichier puis j'ai exécuté le code suivant:

public void run() {
        // TODO Auto-generated method stub
       
        //String cmd="cmd /c cmd.exe /k "cd c:\"+Constantes.adresse2+"&&start min3p.exe"";
        String cmd="cmd /c cmd.exe /k "cd c:\"+Constantes.adresse2;
        try
        {
            Runtime r;
            r = Runtime.getRuntime();
            Process p = r.exec(cmd);

            OutputStream os=p.getOutputStream();
            BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(os, "UTF8"));
            wr.write("min3p.exe < learn.data\n");
            wr.flush();
            os.flush();

            InputStream is=p.getInputStream();
            int num=is.read();
            while(num>-1)
            {
                System.out.print((char)num);
                num=is.read();
            }//endw

        } catch (IOException ex)
        {
        }
        catch(Exception ev)
        {
            System.out.println("erreur d'execution " + cmd + ev.toString());
        }
    }

Ca fonctionne impec, merci beaucoup du coup de main
0
meli82 Messages postés 4 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 28 avril 2009
23 avril 2009 à 15:58
bonjour
excuse moi de te déranger mais j'ai le meme soucis que tu as eu il y a un mois. J'ai un exécutable fortran que je ne peux modifier et qui par défaut pose différentes questions afin de permettre un calcul dont certains des parametres a rentrer son des fichiers. tu dis que tu  es arrivée en mettant les parametres dans un fichier c'est a dire?
merci de ton aide
0
pagoda Messages postés 14 Date d'inscription lundi 9 mars 2009 Statut Membre Dernière intervention 17 décembre 2012
26 avril 2009 à 19:54
Et bien, j'ai tout simplement écrit mon paramètre (à savoir le nom de la simulation) dans un fichier, en l'occurrence mon fichier est learn.data.
0
meli82 Messages postés 4 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 28 avril 2009
27 avril 2009 à 14:02
Merci pour le renseignement c'est ce que j'avais fais et cela ne fonctionne pas dans mon cas


en tout cas merci bonne continuation
0
Rejoignez-nous