如何在 Windows 控制台中将数据输出到自定义流(3> 4> 等)?

Posted

技术标签:

【中文标题】如何在 Windows 控制台中将数据输出到自定义流(3> 4> 等)?【英文标题】:how to output data to custom streams (3> 4> etc..) in windows console? 【发布时间】:2014-05-13 11:33:46 【问题描述】:

在文档中,除了标准 stdinstdoutstderr 之外,还有关于其他流的信息。 (http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx?mfr=true)

UNDEFINED 3-9 - These handles are defined individually by the application and are specific to each tool.

所以我想要完成的是通过自己的输出流创建让我们在插槽 3 上说并将其用于调试。 (我看到系统没有提供stddbg流。)

所以我的问题是 - 是否可以检查非标准输出流是否正在等待数据,就像我对 stderr 所做的那样:

isatty(fileno(stderr)) == 0

然后我可以选择一种对日志文件更友好的错误信息格式。 上面的代码在这样使用命令时是正确的:

myApp.exe param1 param2 2> error.log

但是当我需要区分调试(或性能)和错误消息时,我很想使用另一个流,例如:

myApp.exe param1 param2 3> debug.log

但是如何检查该流是否已连接到应用程序,我应该使用什么名称作为fileno() 函数的参数?

【问题讨论】:

【参考方案1】:

句柄 3-9 似乎只是用于玩命令行的附加临时句柄,例如用于缓冲一些输入/输出。寻找一些 dos shell 巫师的答案,例如this 或this,看看如何使用它。我认为您不能以编程方式定义它。

【讨论】:

【参考方案2】:

遗憾的是,自定义流仅存在于 cmd.exe 的特定实例中,并且不会传递给子进程。 (即使子 cmd.exe 进程也不会从父进程继承自定义流。)

【讨论】:

所以 ms 文档公然撒谎,暗示这些流可以通过编程方式访问:specific to each tool,哇。 从技术上讲,它们可以通过编程方式访问,但仅限于使用内置命令的 MS 开发人员。我怀疑编写该文档的人要么从未意识到该限制,要么不理解它。不幸的是,根据我的经验,世界上缺乏既能理解这种技术细节又能清楚地写出来的人——很多人可以做到其中之一,但很少有人能同时做到。 :-)

以上是关于如何在 Windows 控制台中将数据输出到自定义流(3> 4> 等)?的主要内容,如果未能解决你的问题,请参考以下文章

在 spring 中将 Path 变量绑定到自定义模型对象

如何在swift ios中将多个图像添加到自定义表格视图单元格?

在 django 1.8 中将数据从原始用户模型迁移到自定义用户模型

如何从弹出视图控制器获取数据到自定义表格视图单元格?

如何将参数从视图传递到自定义控制器

如何添加到自定义列表视图用户控制编辑项目列组等任务?