2011-09-12 20 views
10

Ho codice Python che parla a una libreria C++ che accetta solo nomi di file. Voglio che legga da stdin. Su macchine Unix posso usare "/ dev/stdin". Pensavo di poter utilizzare lo speciale dispositivo "CON" su Windows, ma è più simile a/dev/tty in quanto "echo something | my_program" non funziona.Windows equivalente a "/ dev/stdin"?

Il supporto dei tubi sotto Windows non è essenziale, ma ora sono curioso. C'è qualcosa come il nome del file "/ dev/stdin" per quel sistema operativo?

+4

È CONIN $ su Windows. –

+5

@HansPassant Non esattamente. 'test echo | tipo CON' o 'echo test | type CONIN $ '* leggerà dalla console, non da stdin *. Considerando l'equivalente 'test echo | cat/dev/stdin' on * nix funzionerà, anche se è un modo strano e inverso per esprimere il comando. –

+0

Correlati: [Puoi aprire stdin come file su MS Windows in Python?] (Http://stackoverflow.com/questions/8959601/can-you-open-stdin-as-a-file-on-ms-windows -in-python) –

risposta

2

Per quanto ne sappia, non esiste un equivalente di/dev/stdin. Tuttavia, se proprio ne avessi bisogno, potresti creare il tuo named pipe (CreateNamedPipe) e passare il nome alla libreria C++, usando un thread separato per alimentare l'input da stdin nella named pipe.

1

Posso interpretare male la tua domanda: sai di cin e stdin, giusto? Se hai bisogno di un vero handle winapi live per ReadFile o altro, usa GetStdHandle (STD_INPUT_HANDLE)

+1

La funzione "file aperto" nel codice C++ sottostante prende un nome file o uno stream, ma i suoi collegamenti Python non supportano il flusso interfaccia. Posso solo passargli un nome di file stringa e non cin o un handle di file. Invece, voglio fingere qualcosa come "/ dev/stdin". –

2

Gli equivalenti file pseudo su Windows sono conIN$ e conOUT$.

+0

Questi non sono equivalenti. La domanda dice perché (si comportano più come '/ dev/tty') e il commento di Criag Ringer lo espande con un esempio. – 31eee384