Il Sat, 17 Oct 2009 10:38:55 -0400, Dave Angel ha scritto: > mattia wrote: >> Il Fri, 16 Oct 2009 22:40:34 -0700, Dennis Lee Bieber ha scritto: >> >> >>> On Fri, 16 Oct 2009 23:39:38 -0400, Dave Angel <da...@ieee.org> >>> declaimed the following in gmane.comp.python.general: >>> >>> >>> >>>> You're presumably testing this in the interpreter, which prints extra >>>> stuff. In particular, it prints the result value of any expressions >>>> entered at the interpreter prompt. So if you type >>>> >>>> sys.stdout.write("hello") >>>> >>>> then after the write() method is done, the return value of the method >>>> (5) will get printed by the interpreter. >>>> >>>> >>> I was about to respond that way myself, but before doing so I >>> >> wanted >> >>> to produce an example in the interpreter window... But no effect? >>> >>> C:\Documents and Settings\Dennis Lee Bieber>python ActivePython >>> 2.5.2.2 (ActiveState Software Inc.) based on Python 2.5.2 (r252:60911, >>> Mar 27 2008, 17:57:18) [MSC v.1310 32 bit (Intel)] on win32 Type >>> "help", "copyright", "credits" or "license" for more information. >>> >>>>>> import sys >>>>>> sys.stdout.write("hello") >>>>>> >>> hello>>> >>> >>> >>> PythonWin 2.5.2 (r252:60911, Mar 27 2008, 17:57:18) [MSC v.1310 32 bit >>> (Intel)] on win32. >>> Portions Copyright 1994-2006 Mark Hammond - see 'Help/About PythonWin' >>> for further copyright information. >>> >>>>>> import sys >>>>>> sys.stdout.write("This is a test") >>>>>> >>> This is a test >>> >>>>>> print sys.stdout.write("Hello") >>>>>> >>> HelloNone >>> >>> >>> No count shows up... neither PythonWin or Windows command line/ >>> >> shell >> >> Indeed I'm using py3. But now everythong is fine. Everything I just >> wanted to know was just to run this simple script (I've also sent the >> msg 'putchar(8)' to the newsgroup): >> >> import time >> import sys >> >> val = ("|", "/", "-", "\\", "|", "/", "-", "\\") for i in range(100+1): >> print("=", end="") >> # print("| ", end="") >> print(val[i%len(val)], " ", sep="", end="") print(i, "%", sep="", >> end="") >> sys.stdout.flush() >> time.sleep(0.1) >> if i > 9: >> print("\x08"*5, " "*5, "\x08"*5, sep="", end="") >> else: >> print("\x08"*4, " "*4, "\x08"*4, sep="", end="") >> print(" 100%\nDownload complete!") >> >> > Seems to me you're spending too much energy defeating the things that > print() is automatically doing for you. The whole point of write() is > that it doesn't do anything but ship your string to the file/device. So > if you want control, do your own formatting. > > Consider: > > import time, sys, itertools > > val = ("|", "/", "-", "\\", "|", "/", "-", "\\") sys.stdout.write(" > ") > pattern = "\x08"*8 + " {0}{1:02d}%" for percentage, string in > enumerate(itertools.cycle(val)): > if percentage>99 : break > paddednum = pattern.format(string, percentage) > sys.stdout.write(paddednum) > sys.stdout.flush() > time.sleep(0.1) > print("\x08\x08\x08\x08 100%\nDownload complete!") > > > Note the use of cycle() which effectively repeats a list indefinitely. > And enumerate, which makes an index for you automatically when you're > iterating through a list. And str.format() that builds our string, > including using 0 padding so the percentages are always two digits. > > > DaveA
It's always good to learn something new, thanks! -- http://mail.python.org/mailman/listinfo/python-list