Bonjour,

Quand je lance des commandes, avec boostprocess, en utilisant la sortie standard, cela fonctionne bien, sauf si le script exécuté contient la commande Windows timeout 10.
Cette commande sort en code retour 1, dès qu'on ré-achemine la sortie standard avec bp::std_out >.

Je voulais savoir s'il existe un moyen d'exploiter la sortie sans cette incompatibilité ?

Merci d'avance.

Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <boost/process.hpp>
#include <boost/asio.hpp>
 
namespace bp = boost::process;
namespace asio = boost::asio;
 
void read_and_print_output(bp::ipstream& stream) {
    std::cout << "zozo" << std::endl;
    std::string line;
    while (std::getline(stream, line)) {
        std::cout << line << std::endl;
    }
}
 
int main() {
    asio::io_context io_context;
    bp::ipstream pipe_stream;
    int return_code = 0;
 std::string commande="timeout 10";
 
    try {
        // Démarre le processus
        bp::child process(
            //"c:\\temp\\zozo2.cmd",  // Remplacez par la commande souhaitée
            commande,  // Remplacez par la commande souhaitée
            //"c:\\donnees\\pause2.exe",  // Remplacez par la commande souhaitée
            //"netsh",  // Remplacez par la commande souhaitée
            bp::std_out > pipe_stream,
            io_context
        );
 
        // Lire la sortie en temps réel
        asio::post(io_context, [&pipe_stream]() { read_and_print_output(pipe_stream); });
 
        io_context.run();
 
        process.wait();  // Attendre la fin du processus
        return_code = process.exit_code();
 
        std::cout << "\nCode de retour : " << return_code << std::endl;
    }
    catch (const std::exception& ex) {
        std::cerr << "Erreur : " << ex.what() << std::endl;
        return 1;
    }
 
    return return_code;
}