[python3]

K

Kevin Adams

Greetings!

Please forgive me if im posting this to the wrong group.

I'm new to Python, learning Python3 from the O'rielly "Learning
Python" book. Reading
about operator overloading, specifically __getitem__. I put together
a small bit of code to
do some experimenting and threw in a timer so i can see it do its
thing. For some reason
the time.sleep(x) function doesnt work when my print function includes
"end=''".

Thanks in advance for any help.


---code---

class TestClass():
def __init__(self):
self.data = "I was far from home and the spell of the eastern
sea was upon me."

def __getitem__(self,i):
return self.data


import time

if __name__ == "__main__":

me = TestClass()
for x in me:
print(x,end='') #if i remove the 'end=''' it performs as i'd
expect
time.sleep(int(2))
 
S

Steve Holden

Kevin said:
Greetings!

Please forgive me if im posting this to the wrong group.

I'm new to Python, learning Python3 from the O'rielly "Learning
Python" book. Reading
about operator overloading, specifically __getitem__. I put together
a small bit of code to
do some experimenting and threw in a timer so i can see it do its
thing. For some reason
the time.sleep(x) function doesnt work when my print function includes
"end=''".

Thanks in advance for any help.
Try the following changes:
---code---

class TestClass():
def __init__(self):
self.data = "I was far from home and the spell of the eastern
sea was upon me."

def __getitem__(self,i):
return self.data


import time


import sys
if __name__ == "__main__":

me = TestClass()
for x in me:
print(x,end='') #if i remove the 'end=''' it performs as i'd
expect
sys.stdout.flush()
time.sleep(int(2))

It may just be that the output is being held in buffers until the
program terminates. the fluch() methof pushes it straight out.

regards
Steve
 
K

Krister Svanlund

Greetings!

Please forgive me if im posting this to the wrong group.

I'm new to Python, learning Python3 from the O'rielly "Learning
Python" book.  Reading
about operator overloading, specifically __getitem__.   I put together
a small bit of code to
do some experimenting and threw in a timer so i can see it do its
thing.  For some reason
the time.sleep(x) function doesnt work when my print function includes
"end=''".

Thanks in advance for any help.


---code---

class TestClass():
   def __init__(self):
       self.data = "I was far from home and the spell of the eastern
sea was upon me."

   def __getitem__(self,i):
       return self.data


import time

if __name__ == "__main__":

   me = TestClass()
   for x in me:
       print(x,end='')  #if i remove the 'end='''  it performs as i'd
expect
       time.sleep(int(2))


I'm guessing wildly here but I think you have to flush the output.
Can't remember how right now but it won't take much googling for it.
 
T

Terry Reedy

Please forgive me if im posting this to the wrong group.

Just the right place. I would suggest a more informative title in the
future though. 'Problem with print and sleep.', for instance.
I'm new to Python, learning Python3 from the O'rielly "Learning
Python" book. Reading
about operator overloading, specifically __getitem__. I put together
a small bit of code to
do some experimenting and threw in a timer so i can see it do its
thing.

Good idea. Welcome to Python.
For some reason
the time.sleep(x) function doesnt work when my print function includes
"end=''".

I cut your code, pasted it into IDLE edit window, and made two minor
modifications. For me (3.1, winxp) it works perfectly either way --
chars print at 1 sec intervals either vertically or horizonatally. So I
am not sure what you are claiming.
Thanks in advance for any help.


---code---

class TestClass():
def __init__(self):
self.data = "I was far from home and the spell of the eastern
sea was upon me."

I shortened string
def __getitem__(self,i):
return self.data

import time

if __name__ == "__main__":

me = TestClass()
for x in me:
print(x,end='') #if i remove the 'end=''' it performs as i'd
expect
time.sleep(int(2))


int(2) == 2, so delete irrelevant call, and 1 sec is enough

Terry Jan Reedy
 
K

Kevin Adams

Please forgive me if im posting this to the wrong group.

Just the right place. I would suggest a more informative title in the
future though. 'Problem with print and sleep.', for instance.


I'm new to Python, learning Python3 from the O'rielly "Learning
Python" book.  Reading
about operator overloading, specifically __getitem__.   I put together
a small bit of code to
do some experimenting and threw in a timer so i can see it do its
thing.

Good idea. Welcome to Python.
 For some reason
the time.sleep(x) function doesnt work when my print function includes
"end=''".

I cut your code, pasted it into IDLE edit window, and made two minor
modifications. For me (3.1, winxp) it works perfectly either way --
chars print at 1 sec intervals either vertically or horizonatally. So I
am not sure what you are claiming.


Thanks in advance for any help.

class TestClass():
     def __init__(self):
         self.data = "I was far from home and the spell of the eastern
sea was upon me."

I shortened string


     def __getitem__(self,i):
         return self.data

import time
if __name__ == "__main__":
     me = TestClass()
     for x in me:
         print(x,end='')  #if i remove the 'end='''  it performs as i'd
expect
         time.sleep(int(2))

int(2) == 2, so delete irrelevant call, and 1 sec is enough

Terry Jan Reedy


Thanks to all!!!

It did indeed turn out to be a need to flush the stdout.

K

ps. sorry for the brief subject, i wasnt finish and hit send before
comming back to it.
 
T

Terry Reedy

Kevin said:
Greetings!

Please forgive me if im posting this to the wrong group.

I'm new to Python, learning Python3 from the O'rielly "Learning
Python" book. Reading
about operator overloading, specifically __getitem__. I put together
a small bit of code to
do some experimenting and threw in a timer so i can see it do its
thing. For some reason
the time.sleep(x) function doesnt work when my print function includes
"end=''".

Thanks in advance for any help.
Try the following changes:
---code---

class TestClass():
def __init__(self):
self.data = "I was far from home and the spell of the eastern
sea was upon me."

def __getitem__(self,i):
return self.data


import time


import sys
if __name__ == "__main__":

me = TestClass()
for x in me:
print(x,end='') #if i remove the 'end=''' it performs as i'd
expect sys.stdout.flush()

time.sleep(int(2))

It may just be that the output is being held in buffers until the
program terminates. the fluch() methof pushes it straight out.


The IDLE Shell window must get print output back from the pythonw
process without buffering. When I cut and pasted from IDLE editor to
standard interpreter window, output was bunched after several seconds.
OP should have started with short string and minimal delay so output
would not take a whole minute. Flushing fixed problem in standard
interpreter. I will have to remember that testing partial line output in
IDLE does not show how it will act elsewhere.

Kevin: when reporting a problem, be more specific as to what 'does not
work' means.

Terry Jan Reedy
 
K

Kevin Adams

Try the following changes:
---code---
class TestClass():
     def __init__(self):
         self.data = "I was far from home and the spell of the eastern
sea was upon me."
     def __getitem__(self,i):
         return self.data
import time

import sys
           sys.stdout.flush()
It may just be that the output is being held in buffers until the
program terminates. the fluch() methof pushes it straight out.

The IDLE Shell window must get print output back from the pythonw
process without buffering. When I cut and pasted from IDLE editor to
standard interpreter window, output was bunched after several seconds.
OP should have started with short string and minimal delay so output
would not take a whole minute. Flushing fixed problem in standard
interpreter. I will have to remember that testing partial line output in
IDLE does not show how it will act elsewhere.

Kevin: when reporting a problem, be more specific as to what 'does not
work' means.

Terry Jan Reedy


Terry: Will definately try to be more informative next time. Thanks
again.

K
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,013
Latest member
KatriceSwa

Latest Threads

Top