【问题标题】:Enable console application's output to scripts启用控制台应用程序的输出到脚本
【发布时间】:2010-08-16 07:48:27
【问题描述】:

我有一个小型 C++ 控制台应用程序,它显示一个菜单然后执行所选操作。

此外,我编写了一个 VBScript,它在 StdOut(由 Exec 实现)上运行并输入到 StdIn 的值。

但是,当我尝试执行此脚本时,控制台应用程序卡在 scanf 调用中,并且脚本没有从输出中接收任何内容。 _flushall() 没有帮助。

有人知道吗?

谢谢。

【问题讨论】:

  • VBScript 甚至可以做到这一点吗?您至少需要发布显示您如何启动 C++ 程序以及如何写入标准输出的代码。
  • 谢谢汉斯。 C++ 代码由简单的 printf() (写入标准输出,在控制台应用程序的情况下进入屏幕)和 scanf() (从标准输入读取)调用组成。
  • 你确定你写入的管道是脚本的标准输入吗?代码会很有帮助。
  • 我错过了什么吗? printf/scanf 不是指 StdIn/StdOut 吗?
  • 不知道是不是和你的问题有关,但最好避免使用scanfc-faq.com/stdio/scanfprobs.html 。再次,post code(包括 VBScript)。

标签: c++ vbscript console-application stdout stdin


【解决方案1】:

这对于 VBScript/Windows Scripting Host 来说非常困难,因为没有非阻塞 IO。换句话说,没有办法说“阅读现在可用的任何内容,然后立即返回”。

  • 如果您说 ReadLine,它将读取一行。如果现在没有线路准备好,它将等待一条。
  • 如果您说 ReadAll,它将一直读取到文件句柄关闭,即直到程序退出。在那之前它不会返回。

如果您确切地知道程序在每种情况下将创建什么输出,则可以通过脚本执行此操作。

在大多数情况下,如果可能,最好将程序设置为非交互式“批处理”模式,在这种模式下,程序接受命令但无需响应提示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2019-03-23
    • 2010-09-14
    • 1970-01-01
    相关资源
    最近更新 更多