【问题标题】:Redirecting Pipe Output in C++在 C++ 中重定向管道输出
【发布时间】:2021-10-16 13:27:06
【问题描述】:

我正在寻找一种 C/C++ 方法来执行 shell 命令并将该命令的输出存储在 std::string 或文件中,没有输出会自动打印到控制台。

我见过的所有方法都可以做到这一点,而且还可以将执行结果打印到控制台。

例如结合

FILE* pipe = popen("ls", "r");

fgets()

我可以做到这一点,但要打印到控制台。

有没有办法将流的缓冲区从 std::cout 重定向到 std::sstream,或者与 Ubuntu 有什么关系?

任何帮助表示赞赏:)

【问题讨论】:

  • 如果您使用的是popen,则只有stdoutpipe 中可用(除非您自己操作,否则它不会打印在屏幕上)。我建议看看boost::process
  • 如果您在控制台上收到错误消息,您可以通过类似FILE* pipe = popen("ls 2>&1", "r"); 的shell 重定向来组合stdoutstderr
  • 你们都是天才!我没有意识到我从 shell 中得到了错误 => 它们是自动打印的。 2>&1 部分做到了,非常感谢!

标签: c++ c stream pipe


【解决方案1】:

来自 cmets 的 2>&1 部分做到了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2016-10-21
    • 2014-12-11
    • 2016-04-26
    • 1970-01-01
    • 2010-11-20
    • 2014-12-11
    相关资源
    最近更新 更多