【问题标题】:Disable Console Output from External Program (C++)禁用外部程序的控制台输出 (C++)
【发布时间】:2014-12-23 17:17:03
【问题描述】:

我的代码(一个简单的控制台应用程序)调用一个外部程序(也是一个控制台应用程序)。该程序向控制台输出了很多东西,这在以 10,000 多次迭代的批处理模式运行时显着增加了运行时间。

我尝试了几种禁用输出的方法:

  1. 将 cout 和 cerr 重定向到 fout -> 显然可以在当前/本地程序中禁用 couts,但不会禁用外部 .exe 中的任何内容。

  2. 一些消息来源建议使用 system("cls"),但所做的只是在显示文本后清除屏幕。这会增加更多时间。

  3. 另一个建议是隐藏控制台窗口,但程序仍会写入隐藏的控制台,因此整个过程或多或少都需要相同的时间。

似乎剩下的唯一方法是深入外部程序的源代码并禁用所有写入命令或将其重定向到 dev/null 或其他东西。

有没有一种方法可以禁用程序对控制台命令的写入,而无需更改源代码并重新编译?

非常感谢!

【问题讨论】:

  • 您实际上如何调用该程序?如果是system(),你应该简单地在你放在那里的命令中重定向输出。
  • 我使用的是 ShellExecute。我将如何重定向来自 system() 的输出?我对此不太熟悉。谷歌搜索!
  • 感谢您的提示,我找到了 system() > 和 popen 的可能解决方案。如果我设法解决我的问题,我会更新。
  • @crabwalk:如果您自己提出解决方案,可以回答您自己的问题。

标签: c++ console output


【解决方案1】:
system( "theExternalProgram >nul 2>nul" );

【讨论】:

  • 这看起来很有希望,并且具有不生成文件的额外好处。请问“2>nul”部分是做什么的?
  • @crabwalk 2>nul 重定向标准错误流。
  • 感谢所有回复!这个解决方案效果很好。
  • 这个链接也很有用:stackoverflow.com/questions/1103047/…
猜你喜欢
  • 1970-01-01
  • 2020-04-24
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多