sys.stdin on windows

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • zugnush@gmail.com

    sys.stdin on windows

    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=def aultdict(int)
    for line in sys.stdin.readl ines():
    accumulator[line.strip()]+=1
    print "contents,count "
    for key in accumulator.key s():
    print key,",",accumul ator[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?

    Thanks
    Neil

  • Gabriel Genellina

    #2
    Re: sys.stdin on windows

    En Wed, 03 Sep 2008 06:16:03 -0300, zugnush@gmail.c om <zugnush@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=def aultdict(int)
    for line in sys.stdin.readl ines():
    accumulator[line.strip()]+=1
    print "contents,count "
    for key in accumulator.key s():
    print key,",",accumul ator[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.

    --
    Gabriel Genellina

    Comment

    • Tim Golden

      #3
      Re: sys.stdin on windows

      Gabriel Genellina wrote:
      En Wed, 03 Sep 2008 06:16:03 -0300, zugnush@gmail.c om
      <zugnush@gmail. comescribi�:
      >
      >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=de faultdict(int)
      >for line in sys.stdin.readl ines():
      > accumulator[line.strip()]+=1
      >print "contents,count "
      >for key in accumulator.key s():
      > print key,",",accumul ator[key]
      >>
      >$ cat test | ./count.py
      >contents,cou nt
      > , 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.



      TJG

      Comment

      • zugnush@gmail.com

        #4
        Re: sys.stdin on windows

        On Sep 3, 11:16 pm, Tim Golden <m...@timgolden .me.ukwrote:
        Gabriel Genellina wrote:
        En Wed, 03 Sep 2008 06:16:03 -0300, zugn...@gmail.c om
        <zugn...@gmail. comescribi :
        >
        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=def aultdict(int)
        for line in sys.stdin.readl ines():
            accumulator[line.strip()]+=1
        print "contents,count "
        for key in accumulator.key s():
            print key,",",accumul ator[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.
        >

        >
        TJG
        Thanks.

        I'll ues the explicit python call.

        Comment

        • Gabriel Genellina

          #5
          Re: sys.stdin on windows

          En Wed, 03 Sep 2008 07:16:12 -0300, Tim Golden <mail@timgolden .me.uk>
          escribi�:
          Gabriel Genellina wrote:
          >En Wed, 03 Sep 2008 06:16:03 -0300, zugnush@gmail.c om
          ><zugnush@gmail .comescribi�:
          >>
          >>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
          Uhmm... That KB article says the bug was corrected in Windows XP SP1, but
          I have SP3 installed and the test failed. Updating the registry by hand
          solved the problem. A regression maybe?

          --
          Gabriel Genellina

          Comment

          Working...