2011-09-12 9 views
10

私は、ファイル名だけを取るC++ライブラリと対話するPythonコードを持っています。私はそれをstdinから読みたい。 Unixマシンでは、 "/ dev/stdin"を使うことができます。私はWindows上で特別な "CON"デバイスを使うことができると思っていましたが、それは "echo something | my_program"がうまくいかないという点で/ dev/ttyによく似ています。"/ dev/stdin"に相当するWindows?

Windows上のパイプをサポートすることは必須ではありませんが、今は私は好奇心が強いです。そのOSのファイル名 "/ dev/stdin"のようなものがありますか?

+4

WindowsではCONIN $です。 –

+5

@HansPassant正確ではありません。 'echo test | CON'または 'echo test |タイプCONIN $ '*はstdin *からではなくコンソールから読み込みます。 Wherasに相当する 'echo test | cat/dev/stdin' on * nixは動作しますが、それはコマンドをフレーズするには奇妙で逆方向です。 –

+0

関連:[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++コードの "open file"関数はファイル名またはストリームを取りますが、Pythonバインディングはストリームをサポートしていませんインタフェース。私は文字列のファイル名だけを渡すことができ、cinやファイルハンドルは渡すことができません。代わりに、私は "/ dev/stdin"のようなものでそれを偽造したい。 –

2

Windowsの同等の疑似ファイルは、conIN$conOUT$です。

+0

これらは同等ではありません。なぜ彼らは(なぜなら '/ dev/tty'のような働きをしています)、Criag Ringerのコメントはその例を使って拡大しています。 – 31eee384

関連する問題