Récuperer une réponse system()

Signaler
Messages postés
7
Date d'inscription
jeudi 30 janvier 2014
Statut
Membre
Dernière intervention
2 février 2014
-
Messages postés
7
Date d'inscription
jeudi 30 janvier 2014
Statut
Membre
Dernière intervention
2 février 2014
-
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

Messages postés
7
Date d'inscription
jeudi 30 janvier 2014
Statut
Membre
Dernière intervention
2 février 2014

je suis pas sur que ce soit très clair.... :/
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
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
Messages postés
7
Date d'inscription
jeudi 30 janvier 2014
Statut
Membre
Dernière intervention
2 février 2014

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 ?
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
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
Messages postés
7
Date d'inscription
jeudi 30 janvier 2014
Statut
Membre
Dernière intervention
2 février 2014

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() ?
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
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
Messages postés
7
Date d'inscription
jeudi 30 janvier 2014
Statut
Membre
Dernière intervention
2 février 2014

okai merci ^^

bon beh je vais mis mettre
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
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...
Messages postés
7
Date d'inscription
jeudi 30 janvier 2014
Statut
Membre
Dernière intervention
2 février 2014

Merci peux tu expliquer un peu les étapes ?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
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...
Messages postés
7
Date d'inscription
jeudi 30 janvier 2014
Statut
Membre
Dernière intervention
2 février 2014

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.