gpt4 book ai didi

c++ - 防止 popen 显示命令的输出

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

我正在使用以下 C++ 函数执行简单命令并将其输出到 std::string:

std::string runcmd(std::string cmd)
{
std::stringstream output;

FILE *stream = popen(cmd.c_str(), "r");
char buffer[512];

if( !stream )
{
return "popen error";
}

while(fgets(buffer, sizeof(buffer), stream) != NULL)
{
output << buffer;
}

pclose(stream);
return output.str();
}

但是我尝试过的每个命令的行为都不一样。例如,如果我调用“ls -l ~”一切正常,但如果我调用“crontab -l”,输出将显示在控制台中。我怎样才能防止这种行为?

最佳答案

popen 捕获 stdout,而不是 stderr。它只为输出创建一个管道,所以@Galik 的评论是正确的。使用 2>&1 将 stderr(2) 重定向到 stdout(1),或 fork 进程并手动处理所有三个流。

关于c++ - 防止 popen 显示命令的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36293119/

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