2011-09-12 45 views
10

我有一个Python代码只与需要文件名的C++库交谈。我希望它从标准输入读取。在Unix机器上,我可以使用“/ dev/stdin”。我以为我可以在Windows上使用特殊的“CON”设备,但更像是/ dev/tty,因为“echo something | my_program”不起作用。等同于“/ dev/stdin”的Windows?

在Windows下支持管道并不重要,但现在我很好奇。有没有像该操作系统的文件名“/ dev/stdin”?

+4

它在Windows上是CONIN $。 –

+5

@HansPassant不完全。 '回声测试|类型CON'或'echo test |类型CONIN $'*将从控制台读取,而不是从stdin *读取。 Wheras等效的'回声测试| * nix上的cat/dev/stdin'会起作用,尽管这是一个奇怪的反向命令短语。 –

+0

相关:[你可以打开stdin作为一个文件在MS Windows上的Python?](http://stackoverflow.com/questions/8959601/can-you-open-stdin-as-a-file-on-ms-windows -in-python) –

回答

2

据我所知,没有相当于/ dev/stdin。但是,如果您确实需要您可以创建自己的命名管道(CreateNamedPipe)并将该名称传递给C++库,请使用单独的线程将输入从stdin提供到命名管道中。

1

我可能会误解你的问题 - 你知道cin和stdin,对吧?如果你需要为ReadFile或其他任何一个真正的直播winapi句柄,使用GetStdHandle(STD_INPUT_HANDLE)

+1

底层C++代码中的“打开文件”函数需要文件名或流,但其Python绑定不支持流接口。我只能传递一个字符串文件名,而不是cin或文件句柄。相反,我想用“/ dev/stdin”之类的东西来伪造它。 –

2

Windows上的等效伪文件是conIN$conOUT$

+0

这些不相同。这个问题说明了为什么(他们更像'/ dev/tty'),Criag Ringer的评论通过一个例子来扩展它。 – 31eee384