Récuperer une réponse system()

nowear01 Messages postés 7 Date d'inscription jeudi 30 janvier 2014 Statut Membre Dernière intervention 2 février 2014 - Modifié par cptpingu le 30/01/2014 à 15:17
nowear01 Messages postés 7 Date d'inscription jeudi 30 janvier 2014 Statut Membre Dernière intervention 2 février 2014 - 2 févr. 2014 à 18:45
Bonjour,

J'ai un soucis sur un projet, je dois executer par la commande windows un .exe, jusque là pas de soucis.
Le programme executer renvoi une réponse que je voudrais récuperer, or je ne sais pas faire ........

for(int i = 0; ls1 = ls1 - 1; i++)
{
    std::string temp, mef, mef2, nnpath, result;
    temp = s1.substr(i, la1);
    nnpath = "set NN_PATH=C:\/Users\/Nowear\/Desktop\/Cours_M1_GBM\/Bioinfo\/Cpp_project\/Projet_GBM_ADN\/melting\/NNFILES";
    // mise en forme pour la commande system()
    mef = std::string("set NN_PATH=C:\/Users\/Nowear\/Desktop\/Cours_M1_GBM\/Bioinfo\/Cpp_project\/Projet_GBM_ADN\/melting\/NNFILES")
             +std::string("& ")+std::string("C:\/Users\/Nowear\/Desktop\/Cours_M1_GBM\/Bioinfo\/Cpp_project\/Projet_GBM_ADN\/melting\/BIN\/melting.exe")
             +std::string(" -S")+a1+std::string(" -C")+temp+std::string(" -N0.05 -P0.0005 -Hdnadnade");
    result=system(mef.c_str());
    
    std::cout<< i <<"        "<< result << std::endl;
}

11 réponses

nowear01 Messages postés 7 Date d'inscription jeudi 30 janvier 2014 Statut Membre Dernière intervention 2 février 2014
30 janv. 2014 à 13:58
je suis pas sur que ce soit très clair.... :/
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
30 janv. 2014 à 15:15
Bonjour.

On n'utilise jamais la commande "system()".
Il y a plusieurs solutions pour faire cela. Sous Windows, on utilise "ShellExecute()", et sous Unix on utilise "execvp()".

Tu peux aussi utiliser ce projet (mais sous Unix uniquement):
http://codes-sources.commentcamarche.net/source/54458-classe-de-gestion-de-processus

PS: Pense à utiliser des balises de code. Je te les ai ajouté.

__________________________________________________________________________________________________
Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0
nowear01 Messages postés 7 Date d'inscription jeudi 30 janvier 2014 Statut Membre Dernière intervention 2 février 2014
30 janv. 2014 à 21:17
Je connaissais pas la fonction mais je suis un pris par le temps du coup ca m'embete de refaire le code.
j'ai trouvé ca:
system("chemin*.* > results.txt");
est ce que je peux en faire quelques chose ?
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
30 janv. 2014 à 21:20
Je connaissais pas la fonction mais je suis un pris par le temps du coup ca m'embete de refaire le code.
On parle de changer une seule ligne !
Si tu ne peux pas faire cela, alors je pense qu'on ne peut malheureusement rien pour toi...

__________________________________________________________________________________________________
Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0

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

Posez votre question
nowear01 Messages postés 7 Date d'inscription jeudi 30 janvier 2014 Statut Membre Dernière intervention 2 février 2014
30 janv. 2014 à 21:24
c'est pas du tout que je ne veux pas le faire, c'est quelques lignes étant donnée que je n'ai pas mis tout le code et vu que je ne connais pas vraiment la syntaxe ... bref je le ferais vu qu'apparemment je n'ai pas le choix !
par contre pourquoi il ne faut jamais utiliser la fonction system() ?
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
30 janv. 2014 à 21:31
par contre pourquoi il ne faut jamais utiliser la fonction system() ?

Ce n'est pas portable (changer de machines, d'environnement ou de system d'exploitation fait qu'il est n'est pas possible que la commande tapée dans system soit forcément valide partout). La commande system envoie une commande sans garantie de résultats. Ca équivaut à lancer une commande dans un terminal, à travers ton programme, tandis que "ShellExecute" et "execvp" lancent réllement le processus (il est d'ailleurs possible d'intéragir avec celui-ci, ce qui n'est pas possible avec system).
Plus de détails ici: http://stackoverflow.com/questions/19913446/why-to-avoid-system-function-in-c-c

__________________________________________________________________________________________________
Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0
nowear01 Messages postés 7 Date d'inscription jeudi 30 janvier 2014 Statut Membre Dernière intervention 2 février 2014
30 janv. 2014 à 21:38
okai merci ^^

bon beh je vais mis mettre
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 févr. 2014 à 00:01
Windows uniquement, full interaction possibe et retour de process lancé.
  STARTUPINFO si;
PROCESS_INFORMATION pi;
DWORD excode;
CreateProcess(...); // A TOI DE VOIR CE QUE TU Y METS
CloseHandle(pi.hThread); // ON LIBERE DEJA CE QU'ON PEUT
WaitForSingleObject(pi.hProcess, INFINITE);
GetExitCodeProcess(pi.hProcess, &excode); // RETOUR PROCESS ICI
CloseHandle(pi.hProcess); // ON FINIT DE LIBERER

ciao...
0
nowear01 Messages postés 7 Date d'inscription jeudi 30 janvier 2014 Statut Membre Dernière intervention 2 février 2014
2 févr. 2014 à 12:25
Merci peux tu expliquer un peu les étapes ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
2 févr. 2014 à 16:13
Tu es allé voir MSDN pour détails des fonctions ?
Si c'était le cas, tu n'aurais quasi plus de questions sur ce sujet.

Commence par CreateProcess():
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx
Tu auras déjà presque tout.

Le plus important est de correctemnt remplir les champs de la struct STARTUPINFO.
STARTUPINFO si;
si.cb = sizeof(STARTUPINFO); // INDISPENSABLE
Autres mebres, à toi de voir selon type de prog que tu lances.

Autre point IMPORTANT:
Vu qu'on attend (voir WaitForSingleObject()) un retour (fin du prog lancé) par GetExitCodeProcess(), il est indispensable de mettre tout ce code dans un thread, voir CreateThread().

Rien de tel que des tests.

ciao...
0
nowear01 Messages postés 7 Date d'inscription jeudi 30 janvier 2014 Statut Membre Dernière intervention 2 février 2014
2 févr. 2014 à 18:45
Merci d'avoir essayé de m'aider après une journée de lecture du site Microsoft et des essais non concluants ... je me résigne à ne pas finir ce projet, me restait juste à récupérer la réponse dommage.

Merci à tous a bientôt.
0
Rejoignez-nous