gpt4 book ai didi

c++ - 如何使用 C++ libboost 运行进程并获取其输出?

转载 作者:行者123 更新时间:2023-11-30 03:21:17 24 4
gpt4 key购买 nike

我正在尝试运行外部 shell 命令并使用 C++ 的 Boost 库读取其输出,但似乎该命令未运行或我无法访问输出。我正在使用 their documentation举个例子,这样写:

#include <boost/process.hpp>
namespace bp = boost::process;

bool is_process_running(std::string p_name){
string cmd = "ps aux 2>&1";
bp::ipstream out;
std::string line;
bp::child c(cmd, bp::std_out > out);

// the while is supposed to read each line of the output
// but the execution doesn't enter here
while(c.running() && std::getline(out, line) && !line.empty())
{
if(line.find(p_name) != std::string::npos)
{
return true;
}
}
c.wait();
return false;
}

目标是验证 ps aux 的每一行输出并搜索进程是否正在运行。那么,这里可能是什么问题?或者,您能否提供一个简单的代码片段来执行此操作?

最佳答案

只需使用一个 shell(或使用 bp::system):

Live On Coliru

#include <boost/process.hpp>
namespace bp = boost::process;

bool is_process_running(std::string p_name){
std::vector<std::string> args { "-c", "ps aux 2>&1" };
bp::ipstream out;
bp::child c(bp::search_path("sh"), args, bp::std_out > out);

for (std::string line; c.running() && std::getline(out, line);) {
if (line.find(p_name) != std::string::npos) {
return true;
}
}
c.wait();

return false;
}

#include <iostream>
int main() {
std::cout << "bogus: " << is_process_running("bogus") << "\n";
std::cout << "a.out: " << is_process_running("a.out") << "\n";
}

打印

bogus: 0
a.out: 1

关于c++ - 如何使用 C++ libboost 运行进程并获取其输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52187867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com