Windows binary stdin goes EOF after \x1a character

Neil Cerutti neilc at norwich.edu
Fri Oct 15 16:42:33 EDT 2010


On 2010-10-15, MRAB <python at mrabarnett.plus.com> wrote:
>> I wrote an equivalent program in C++ using the win32
>> ReadFile() call, and it read all 255 bytes just fine.  What am
>> I doing wrong with the python code?
>>
>>
>> I am using Erlang to launch the Python program as a subprocess.  The
>> Erlang fragment that launches this and sends the data is:
>>
>>      Port=open_port( {spawn_executable, "c:/Python31/pythonw.exe"},
>> 		    [{args, ["c:/iotest/main.pyw"]}]),
>>      Port ! {self(),{command,lists:seq(1,255)}},
>
> By default, Python opens stdin in buffered text mode in which
> '\x1A' marks the end of the text. Try adding the "-u" option
> ("unbuffered") to Python's command line:
>
>      pythonw.exe -u main.pyw

To expound a bit, using a windows-only module you can switch the
mode of stdin.

import sys
import msvcrt

msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)

-- 
Neil Cerutti



More information about the Python-list mailing list