Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在程序运行时获得程序的输出';她在跑步吗? 如果我有一个用C++编写的Windows控制台程序,程序运行时是否有可能检索该程序的标准输出?如果不是,重写程序的最佳方式是什么?我知道我可以输出到文件,并不断检查这些文件的更新。还有别的办法吗?有更好的方法吗?_C++_Windows_Console_Stdout - Fatal编程技术网

是否可以在程序运行时获得程序的输出';她在跑步吗? 如果我有一个用C++编写的Windows控制台程序,程序运行时是否有可能检索该程序的标准输出?如果不是,重写程序的最佳方式是什么?我知道我可以输出到文件,并不断检查这些文件的更新。还有别的办法吗?有更好的方法吗?

是否可以在程序运行时获得程序的输出';她在跑步吗? 如果我有一个用C++编写的Windows控制台程序,程序运行时是否有可能检索该程序的标准输出?如果不是,重写程序的最佳方式是什么?我知道我可以输出到文件,并不断检查这些文件的更新。还有别的办法吗?有更好的方法吗?,c++,windows,console,stdout,C++,Windows,Console,Stdout,如果是现成的控制台可执行文件 您可以在如下文件中重定向它的输出: SECURITY_ATTRIBUTES secattr = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; c:>回显一些文本>文件 或 c:>程序>文件 如果你是这个意思? 因为你的问题不太清楚 \\进入另一个程序 哦,好的 但我的第一个答案也已经习惯了。 因为还有另一种可能性,比如: c:>程序1 |程序2 它在控制台程序之间形成一个“管道” program2在其标准上接收progr

如果是现成的控制台可执行文件 您可以在如下文件中重定向它的输出:

SECURITY_ATTRIBUTES secattr = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };
c:>回显一些文本>文件

c:>程序>文件

如果你是这个意思? 因为你的问题不太清楚

\\进入另一个程序

哦,好的
但我的第一个答案也已经习惯了。 因为还有另一种可能性,比如:

c:>程序1 |程序2

它在控制台程序之间形成一个“管道”
program2在其标准上接收program1向标准输出的内容
它在控制台程序中常见的老式Unix方式实践。

这样就不需要重写程序来专门支持它。

Code Project中有一些有趣的文章:

  • (C#)
  • (MFC/C++)
  • (MFC/C++)

是,如果您自己启动该程序:

在中,传递一个,可以在其中为SDIN、STDOUT和STDERR指定句柄。请注意,一旦指定了
STARTF\u USESTDHANDLES
标志,oyu就需要提供所有三个

此外,句柄需要是可继承的(否则,子进程无法访问它们),因此SECURITY_属性基本上需要如下所示:

SECURITY_ATTRIBUTES secattr = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };

您可以打开包含输入和接收输出的磁盘文件的句柄。或者,这可以是在console应用程序运行时增量读取/写入的数据。

如果您只对程序的stdout感兴趣,则popen()使这一点非常简单:

FILE* program_output = popen("command line to start the other program");
//read from program_output as you would read a "normal" file
//...
pclose(program_output);

您很可能需要使用管道来实现这一点,因为您使用的是Windows,这里有一个指向的链接,其中有一个示例似乎完全符合您的要求。

将其检索到何处?另一个程序或日志文件?另外的程序也是用C++编写的?但非特定语言的解决方案将是最好的。