2011-09-12 18 views
10

Tengo el código de Python hablando con una biblioteca de C++ que solo toma los nombres de archivo. Quiero que lea de stdin. En máquinas Unix puedo usar "/ dev/stdin". Pensé que podría usar el dispositivo especial "CON" en Windows, pero eso se parece más a/dev/tty porque "echo something | my_program" no funciona.Windows equivalente a "/ dev/stdin"?

Tubos de soporte en Windows no es esencial, pero ahora tengo curiosidad. ¿Hay algo así como el nombre de archivo "/ dev/stdin" para ese sistema operativo?

+4

Es CONIN $ en Windows. –

+5

@HansPassant No exactamente. 'prueba de eco | escriba CON' o 'eco test | tipo CONIN $ '* se leerá desde la consola, no desde stdin *. Wheras el equivalente 'prueba de eco | cat/dev/stdin' on * nix funcionará, aunque es una forma extraña y retrógrada de expresar el comando. –

+0

Relacionado: [¿Se puede abrir stdin como un archivo en MS Windows en Python?] (Http://stackoverflow.com/questions/8959601/can-you-open-stdin-as-a-file-on-ms-windows -in-python) –

Respuesta

2

A mi leal saber y entender, no existe un equivalente de/dev/stdin. Sin embargo, si realmente lo necesitara, podría crear su propia tubería con nombre (CreateNamedPipe) y pasar el nombre a la biblioteca C++, usando una cadena separada para alimentar la entrada de stdin en la tubería con nombre.

1

Es posible que esté malinterpretando su pregunta - usted sabe de cin y stdin, ¿verdad? Si necesita un controlador winapi real en vivo para ReadFile o lo que sea, use GetStdHandle (STD_INPUT_HANDLE)

+1

La función "abrir archivo" en el código C++ subyacente toma un nombre de archivo o una secuencia, pero sus enlaces Python no son compatibles con la secuencia interfaz. Solo puedo pasarle un nombre de archivo de cadena y no cin o un manejador de archivo. En cambio, quiero falsificarlo con algo como "/ dev/stdin". –

2

Los pseudoarchivos equivalentes en Windows son conIN$ y conOUT$.

+0

Esos no son equivalentes. La pregunta dice por qué (actúan más como '/ dev/tty') y el comentario de Criag Ringer se amplía con un ejemplo. – 31eee384