reading piped input in Windows

Georgy Pruss SEE_AT_THE_END at hotmail.com
Sat Nov 15 21:19:54 EST 2003


Hmmm.

t1.py | t2.py  -- doesn't work, because:
t1.py >tt       -- DOES work
t2.py <tt       -- does NOT work. sys.stdin.fileno() shows -1 instead of 0
python t2.py <tt  -- works

What's your Registry key [HKEY_CLASSES_ROOT\Python.File\shell\open\command]?
Mine shows "(default)" = """C:\Apps\Python\python.exe "%1" %*"""

>>> sys.version
'2.3 (#46, Jul 29 2003, 18:54:32) [MSC v.1200 32 bit (Intel)]'
>>> sys.getwindowsversion() # XP
(5, 1, 2600, 2, 'Service Pack 1')

G-:
-- 
Georgy Pruss
E^mail: 'ZDAwMTEyMHQwMzMwQGhvdG1haWwuY29t\n'.decode('base64')


"Michael Geary" <Mike at DeleteThis.Geary.com> wrote in message news:vrctp0r6g8qf2b at corp.supernews.com...
| Patrick Useldinger:
| > I am writing a filter, i.e. a program that reads from stdin and writes
| > to stdout. It works ok when run on its own, but does not work when I try
| > to use another program's output.
| >
| > -  The producer program (t1):
| > print "a b c"
| > print "d e f"
| >
| > - The filter program (t2):
| > import sys
| > r = sys.stdin.readlines()
| > for i in r:
| >     print '<',i,'>'
| >
| > When i connect them using 't1 ¦ t2', I get the following error message:
| > Traceback (most recent call last):
| >   File "[...]", line 2, in ?
| >     r = sys.stdin.readlines()
| > IOError: [Errno 9] Bad file descriptor
| >
| > The same programs work correctly under Linux, so I suppose that Windows
| > handles redirectionned input differently from 'normal' console input.
| > Can anyone point me to a portable solution that works both under Windows
| > and Linux?
|
| It works OK for me on Windows XP SP1 with Python 2.3.2:
|
| C:\Test\PythonTest >>t1.py | t2.py
| < a b c
| >
| < d e f
| >
|
| What versions of Windows and Python are you running?
|
| BTW, here's a simpler way to write the loop in t2.py:
|
| import sys
| for line in sys.stdin:
|     print '<', line, '>'
|
| Or this, to get rid of the extra newlines (not clear if those are intended
| or not):
|
| import sys
| for line in sys.stdin:
|     print '<', line[:-1], '>'
|
| -Mike
|
|






More information about the Python-list mailing list