【发布时间】:2021-10-16 13:27:06
【问题描述】:
我正在寻找一种 C/C++ 方法来执行 shell 命令并将该命令的输出存储在 std::string 或文件中,没有输出会自动打印到控制台。
我见过的所有方法都可以做到这一点,而且还可以将执行结果打印到控制台。
例如结合
FILE* pipe = popen("ls", "r");
和
fgets()
我可以做到这一点,但要打印到控制台。
有没有办法将流的缓冲区从 std::cout 重定向到 std::sstream,或者与 Ubuntu 有什么关系?
任何帮助表示赞赏:)
【问题讨论】:
-
如果您使用的是
popen,则只有stdout在pipe中可用(除非您自己操作,否则它不会打印在屏幕上)。我建议看看boost::process -
如果您在控制台上收到错误消息,您可以通过类似
FILE* pipe = popen("ls 2>&1", "r");的shell 重定向来组合stdout和stderr -
你们都是天才!我没有意识到我从 shell 中得到了错误 => 它们是自动打印的。 2>&1 部分做到了,非常感谢!