sys.stdin on windows

zugnush at gmail.com zugnush at gmail.com
Wed Sep 3 06:35:15 EDT 2008


On Sep 3, 11:16 pm, Tim Golden <m... at timgolden.me.uk> wrote:
> Gabriel Genellina wrote:
> > En Wed, 03 Sep 2008 06:16:03 -0300, zugn... at gmail.com
> > <zugn... at gmail.com> escribi :
>
> >> I often grep particular patterns out of large logfiles and then
> >> pipeline the output to sort and uniq -c
> >> I thought today to knock up a script to do the counting in a python
> >> dict.
>
> >> This seems work in linux
>
> >> $ cat count.py
> >> #!/usr/bin/env python
> >> import sys
> >> from collections import defaultdict
> >> accumulator=defaultdict(int)
> >> for line in sys.stdin.readlines():
> >>     accumulator[line.strip()]+=1
> >> print "contents,count"
> >> for key in accumulator.keys():
> >>     print key,",",accumulator[key]
>
> >> $ cat test | ./count.py
> >> contents,count
> >>  , 1
> >> 23 , 1
> >> 1 , 1
> >> 3 , 2
> >> 2 , 2
> >> 5 , 3
>
> >> When I try to run the same thing on windows I get
> >> IOError: [Error 9] Bad file descriptor
>
> >> How can I make this more windows friendly?
>
> > Explicitely invoking the interpreter worked for me. That is, these two
> > commands worked fine:
>
> > type test.txt | python count.py
> > python count.py < test.txt
>
> > But I cannot explain *why* it doesn't work the other way.
>
> Known bug in NT-based file association. I'll try
> to find an online reference, but that's basically
> what it comes to. I think you can faff-about with
> batch files to achieve the effect, but I can't
> quite remember.
>
> http://support.microsoft.com/kb/321788
>
> TJG

Thanks.

I'll ues the explicit python call.



More information about the Python-list mailing list