#1 Le 26/08/2020, à 17:21
- lanfust
[Résolu] Infos affichées dans le terminal et les passer en c++
Bonjour,
Je cherche une solution pour récupérer des données lancées par une commande dans le terminal et les transférer dans un programme en c++ (si c'est possible !)
Par exemple dans un programme c++ je lance par
system("df -aH | grep /media");
et j'obtiens dans la console
/dev/sdb1 1,1T 30G 971G 3% /media/duncan/PGM
/dev/sdc1 1,1T 139G 862G 14% /media/duncan/Android
/dev/sdd1 1,1T 80G 921G 8% /media/duncan/Windows
/dev/sde1 1,1T 15G 986G 2% /media/duncan/Video
/dev/sdf1 16G 2,8G 13G 18% /media/duncan/UBUNTU2004
Si possible merci de m'indiquer une piste car pour le moment je ne sais même pas si c'est réalisable
Dernière modification par lanfust (Le 02/09/2020, à 15:10)
Dual boot Windows 11 / Ubuntu 24.04
ASUS X751L Ubuntu-Mate 24.04
Créer une clé usb bootable
https://github.com/kramer04/usb_Bootable
Hors ligne
#2 Le 26/08/2020, à 19:44
- lann
Re : [Résolu] Infos affichées dans le terminal et les passer en c++
Une façon de faire serait de rediriger la sortie de la commande vers un fichier que ton programme serait en attente de lecture
Après, tu peux également lancé une commande directement dans le code avec system : http://www.cplusplus.com/reference/cstdlib/system/
<Modéré>
Hors ligne
#3 Le 27/08/2020, à 07:21
- lanfust
Re : [Résolu] Infos affichées dans le terminal et les passer en c++
Une façon de faire serait de rediriger la sortie de la commande vers un fichier que ton programme serait en attente de lecture
Après, tu peux également lancé une commande directement dans le code avec system : http://www.cplusplus.com/reference/cstdlib/system/
Ok merci je vais explorer cette piste.
Dual boot Windows 11 / Ubuntu 24.04
ASUS X751L Ubuntu-Mate 24.04
Créer une clé usb bootable
https://github.com/kramer04/usb_Bootable
Hors ligne
#4 Le 27/08/2020, à 08:09
- kamaris
Re : [Résolu] Infos affichées dans le terminal et les passer en c++
gedit fait ça, tu peux jeter un œil au code, ça doit être là : https://gitlab.gnome.org/GNOME/gedit/-/ … app.c#L324
C'est du C donc tu peux au moins t'en inspirer.
Hors ligne
#5 Le 27/08/2020, à 08:12
- Watael
Re : [Résolu] Infos affichées dans le terminal et les passer en c++
salut,
ce n'est probablement pas la meilleure façon de faire; en tout cas, en shell on évite le plus possible le recours aux fichiers temporaires.
je ne connais pas le C(++), mais je serais surpris qu'il ne soit pas possible de stocker le résultat en mémoire, plus ou moins de la même manière qu'est lu un fichier.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 27/08/2020, à 12:53
- kamaris
Re : [Résolu] Infos affichées dans le terminal et les passer en c++
Je précise au cas où : quand je dis « gedit fait ça », je veux dire qu'il sait lire depuis l'entrée standard, pas qu'il le fait via un fichier temporaire.
Hors ligne
#7 Le 27/08/2020, à 12:57
- Watael
Re : [Résolu] Infos affichées dans le terminal et les passer en c++
salut kamaris,
nos messages ce sont croisés, je ne répondais pas à ton intervention, mais à celle de lann
Une façon de faire serait de rediriger la sortie de la commande vers un fichier que ton programme serait en attente de lecture
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 27/08/2020, à 13:14
- kamaris
Re : [Résolu] Infos affichées dans le terminal et les passer en c++
Salut Watael,
Oui je m'en doutais, mais j'ai préféré préciser pour éviter toute confusion
Hors ligne
#9 Le 27/08/2020, à 13:26
- grigouille
Re : [Résolu] Infos affichées dans le terminal et les passer en c++
Ceci peut-être :
man popen
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#10 Le 02/09/2020, à 15:06
- lanfust
Re : [Résolu] Infos affichées dans le terminal et les passer en c++
Merci pour vos conseils
J'ai pris le temps de voir comment faire
La solution la plus efficace pour moi est de passer avec popen
Ce petit programme fait ce que je cherche
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
string getPopen(string cmd){
string data;
FILE *stream;
const int max_buffer = cmd.size();
char buffer[max_buffer];
stream = popen(cmd.c_str(), "r");
if(stream){
while (!feof(stream))
if(fgets(buffer, max_buffer, stream) !=NULL) data.append(buffer);
pclose(stream);
}
return data;
}
int main()
{
string df("df -ah | grep /dev/sd 2>&1");
string sortie(getPopen(df));
cout << "Sortie = " << endl;
cout << sortie << endl;
}
Dual boot Windows 11 / Ubuntu 24.04
ASUS X751L Ubuntu-Mate 24.04
Créer une clé usb bootable
https://github.com/kramer04/usb_Bootable
Hors ligne