Carriage Return Problem with Python on Windows

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Canes_Rock

    Carriage Return Problem with Python on Windows

    The information posted at:



    seemed to provide a solution to eliminating the line feed and causing
    a carriage return for the text displayed in the IDLE window, (I want
    to be able to overwrite displayed text - that is, eliminating the line
    feed from occuring and causing a carriage return).

    The comma at the end of the print command appeared to have eliminated
    the line feed, (\n), but the carriage return, (\r) does not work. For
    example, (logic borrowed from previously referenced thread):

    for i in range(10) : print '\r' + `i`,

    This produces a small square box before each number, (sorry - can't
    duplicate the small square box here in this posting but if you were to
    substitute X for box the output would look like this):

    X1 X2 X3 X4 X5 X6 X7 X8 X9

    as you can see the line feed has been eliminated but the carriage
    return is not functioning as I would expect, (yes - its always about
    me isn't it?).

    I also tried a variation using sys.stdout.writ e and sys.stdout.flus h
    but the root cause is the issue with the carriage return.

    Am I screwed or is there a way around this? I am running Windows XP
    Home Edition using Python version 2.3.3 and IDLE version 1.0.2

    Any help would be appreciated!

    Thanks...
  • Dennis Lee Bieber

    #2
    Re: Carriage Return Problem with Python on Windows

    On 2 Sep 2004 12:55:07 -0700, hinnc@yahoo.com (Canes_Rock) declaimed the
    following in comp.lang.pytho n:

    [color=blue]
    > The comma at the end of the print command appeared to have eliminated
    > the line feed, (\n), but the carriage return, (\r) does not work. For
    > example, (logic borrowed from previously referenced thread):
    >
    > for i in range(10) : print '\r' + `i`,
    >
    > This produces a small square box before each number, (sorry - can't
    > duplicate the small square box here in this posting but if you were to
    > substitute X for box the output would look like this):
    >[/color]

    If you load a "unix" text file into Windows Notepad, you'll see
    the same effect.

    The Windows (MS-DOS) text rendering expects to see both <cr><lf>
    to generate a newline; when it sees either character by itself, it tends
    to throw up its hands and print the "unprintabl e control character" box.

    At least, that's been my experience on W9x. (WordPad is a bit
    more intelligent, and somehow determines the line-end convention of the
    input file).


    --[color=blue]
    > =============== =============== =============== =============== == <
    > wlfraed@ix.netc om.com | Wulfraed Dennis Lee Bieber KD6MOG <
    > wulfraed@dm.net | Bestiaria Support Staff <
    > =============== =============== =============== =============== == <
    > Home Page: <http://www.dm.net/~wulfraed/> <
    > Overflow Page: <http://wlfraed.home.ne tcom.com/> <[/color]

    Comment

    • Roel Schroeven

      #3
      Re: Carriage Return Problem with Python on Windows

      Canes_Rock wrote:[color=blue]
      > The information posted at:
      >
      > http://groups.google.com/groups?hl=e...net%26rnum%3D1
      >
      > seemed to provide a solution to eliminating the line feed and causing
      > a carriage return for the text displayed in the IDLE window, (I want
      > to be able to overwrite displayed text - that is, eliminating the line
      > feed from occuring and causing a carriage return).
      >
      > The comma at the end of the print command appeared to have eliminated
      > the line feed, (\n), but the carriage return, (\r) does not work. For
      > example, (logic borrowed from previously referenced thread):
      >
      > for i in range(10) : print '\r' + `i`,
      >
      > This produces a small square box before each number, (sorry - can't
      > duplicate the small square box here in this posting but if you were to
      > substitute X for box the output would look like this):
      >
      > X1 X2 X3 X4 X5 X6 X7 X8 X9
      >
      > as you can see the line feed has been eliminated but the carriage
      > return is not functioning as I would expect, (yes - its always about
      > me isn't it?).[/color]

      With IDLE, I just see 1 2 3 etc. all on one line, i.e. the same as you
      do but without the boxes. PythonWin shows each number on its own line.
      Python at the command prompt works correctly: only 9 is whown in the
      end, since all the other numbers are overwritten. All that on Windows XP
      Professional with Python 2.3.3.

      It seems the behavior of '\r' is dependent on the terminal.

      --
      "Codito ergo sum"
      Roel Schroeven

      Comment

      • Larry Bates

        #4
        Re: Carriage Return Problem with Python on Windows

        Here is a sample progress indicator class that should
        (I think) answer your questions:

        class progressbarClas s:
        def __init__(self, finalcount, progresschar=No ne):
        import sys
        self.finalcount =finalcount
        self.blockcount =0
        #
        # See if caller passed me a character to use on the
        # progress bar (like "*"). If not use the block
        # character that makes it look like a real progress
        # bar.
        #
        if not progresschar: self.block=chr( 178)
        else: self.block=prog resschar
        #
        # Get pointer to sys.stdout so I can use the write/flush
        # methods to display the progress bar.
        #
        self.f=sys.stdo ut
        #
        # If the final count is zero, don't start the progress gauge
        #
        if not self.finalcount : return
        self.f.write('\ n------------------ %
        Progress -------------------1\n')
        self.f.write(' 1 2 3 4 5 6 7 8 9 0\n')
        self.f.write('----0----0----0----0----0----0----0----0----0----0\n')
        return

        def progress(self, count):
        #
        # Make sure I don't try to go off the end (e.g. >100%)
        #
        count=min(count , self.finalcount )
        #
        # If finalcount is zero, I'm done
        #
        if self.finalcount :
        percentcomplete =int(round(100* count/self.finalcount ))
        if percentcomplete < 1: percentcomplete =1
        else:
        percentcomplete =100

        #print "percentcomplet e=",percentcomp lete
        blockcount=int( percentcomplete/2)
        #print "blockcount=",b lockcount
        if blockcount > self.blockcount :
        for i in range(self.bloc kcount,blockcou nt):
        self.f.write(se lf.block)
        self.f.flush()

        if percentcomplete == 100: self.f.write("\ n")
        self.blockcount =blockcount
        return

        if __name__ == "__main__":
        from time import sleep
        pb=progressbarC lass(8,"*")
        count=0
        while count<9:
        count+=1
        pb.progress(cou nt)
        sleep(0.2)

        pb=progressbarC lass(100)
        pb.progress(20)
        sleep(0.2)
        pb.progress(47)
        sleep(0.2)
        pb.progress(90)
        sleep(0.2)
        pb.progress(100 )
        print "testing 1:"
        pb=progressbarC lass(1)
        pb.progress(1)


        "Canes_Rock " <hinnc@yahoo.co m> wrote in message
        news:48593215.0 409021155.69139 a18@posting.goo gle.com...[color=blue]
        > The information posted at:
        >
        >[/color]
        http://groups.google.com/groups?hl=e...net%26rnum%3D1[color=blue]
        >
        > seemed to provide a solution to eliminating the line feed and causing
        > a carriage return for the text displayed in the IDLE window, (I want
        > to be able to overwrite displayed text - that is, eliminating the line
        > feed from occuring and causing a carriage return).
        >
        > The comma at the end of the print command appeared to have eliminated
        > the line feed, (\n), but the carriage return, (\r) does not work. For
        > example, (logic borrowed from previously referenced thread):
        >
        > for i in range(10) : print '\r' + `i`,
        >
        > This produces a small square box before each number, (sorry - can't
        > duplicate the small square box here in this posting but if you were to
        > substitute X for box the output would look like this):
        >
        > X1 X2 X3 X4 X5 X6 X7 X8 X9
        >
        > as you can see the line feed has been eliminated but the carriage
        > return is not functioning as I would expect, (yes - its always about
        > me isn't it?).
        >
        > I also tried a variation using sys.stdout.writ e and sys.stdout.flus h
        > but the root cause is the issue with the carriage return.
        >
        > Am I screwed or is there a way around this? I am running Windows XP
        > Home Edition using Python version 2.3.3 and IDLE version 1.0.2
        >
        > Any help would be appreciated!
        >
        > Thanks...[/color]


        Comment

        Working...