print without new line only appear after I write something else [duplicate] - python

This question already has answers here:
Printing on the same line with time.sleep()
(2 answers)
Closed 8 years ago.
I'm using Python 2.7.3 and I running the code below
def t2():
print "Waiting...",
time.sleep(3)
print "done."
time.sleep(1)
print "test"
time.sleep(2)
print "testing"
When I run this code, the string "Waiting... done." appear at same time. It's like the sleep(2) is before the first print.
If I don't use comma to remove new line (Like "test" and "testing" examples), sleep function works ok but I get "Waiting..." and "done." on different lines.
I already tried:
for i in range(0, 5): time.sleep(1)
and
subprocess.check_output(["sleep", "5"])
What can I do?
Thank you.

Depending what you are working with data doesn't necessarily get written right away. In particular,
display output often waits until it receives a newline before printing anything.
flush() makes sure it all gets written right now.
Background reading that helps explain better than I can:
Usage of sys.stdout.flush() method

Related

When I run my python file the normal function doesn't do anything happens, nothing is outputted, how can I display the function [duplicate]

This question already has answers here:
Why doesn't the main() function run when I start a Python script? Where does the script start running (what is its entry point)?
(5 answers)
Closed 11 months ago.
This post was edited and submitted for review 11 months ago and failed to reopen the post:
Original close reason(s) were not resolved
I am writing a function which is supposed to get the user's response, yet when I run the file nothing happens, its just an empty screen, how do I fix that? I tried searching up in stackoverflow but I couldnt find what im looking for, thanks in advance :)
def get_user_response():
while True:
try:
print ('Enter the number of clickbait headlines to generate: (0 to exit)')
user = int(input('> '))
print ('HEADLINES')
if user == 0:
for x in range (0,4):
l = "Exiting Program" + "." * x
print (l, end="\r")
sleep(1)
break
else:
print ('a')
except:
print ('Invalid - Enter an integer')
You defined a function but never called it anywhere. That's why the program is not running in the first place. Just write
get_user_response()
anywhere outside of the function.
Also consider wrapping only the user input line into the try except statement, otherwise you will literally catch every possible error that might occur in your function without ever getting an error message.
def get_user_response(trueorfalse):
while trueorfalse:
.....your codes
get_user_response(True)
your function should have arg like thaht

Sleep function not working after program is saved [duplicate]

This question already has answers here:
How can I flush the output of the print function?
(13 answers)
Closed 1 year ago.
I am using a time.sleep function to have my strings printed letter by letter, and it works perfectly while running inside pycharm, yet when I save the program and run it directly, the function does not take effect
def welcome():
greeting = random.choice(open_msg)
for i in range(len(greeting)):
print(greeting[i], end='')
time.sleep(0.15)
This is an example of what the code looks like
By default, Python's output is line-buffered. Therefore it won't print anything until you print a linefeed. To avoid this behavior, flush the output after each letter. Since Python 3.3, print() has an argument to do this. (For older versions, you need to sys.stdout.flush() after each print().)
print(greeting[i], end='', flush=True)
You can cause Python not to buffer by invoking it with the -u flag or by setting the environment variable PYTHONUNBUFFERED to any value. But these affect all output. It's better to use flush where you need it and leave other output buffered, because buffered is faster.
By the way, don't use range() when iterating over a string. Iterate over the string directly and you get the characters.
for c in greeting:
print(c, end='', flush=True)
# etc.
Ides can take longer to execute, amplifying the time.sleep() function
Maybe lengthen the time in the argument of time.sleep()
It should be working. Perhaps you forgot one of your imports? If so, here is the code, it is written well.
import random
import time
open_msg = ['hello', 'finished', 'chicken']
def welcome():
greeting = random.choice(open_msg)
for i in range(len(greeting)):
print(greeting[i], end='' )
time.sleep(0.15)
welcome()
``

Python3 how to clear previous prints while looping, flush? [duplicate]

This question already has answers here:
Replace console output in Python
(12 answers)
Closed 2 years ago.
I want to show only one item at the screen I guess this should be done with print(..., flush=True) but it don't work as I expected.
for i in range(0,100):
print(i, end='', flush=True)
Now I get a numbers like this 012345678.... and what I want to see at the screen is only one number without seeing previous prints so with first iteration it shows only 0 second shows only 1, I thought flush would do the trick but it didn't so where am I wrong?
You can use end='\r' as an argument to print(). \r escape sequence moves the cursor to the starting of the line. flush is not the correct argument for doing this.
Your code can be:
for i in range(0,100):
print(i, end='\r')
You can make use of os module to do the same
import os
import time
for i in range(100):
print(i)
time.sleep(1)
os.system("clear") # For Linux
#os.system("cls") # For Windows
I have used time.sleep() to make sure the effect is visible otherwise it executes very fast. You may make variations as per the need.

time.sleep not working per item in range or list [duplicate]

This question already has answers here:
How can I flush the output of the print function?
(13 answers)
Closed 2 years ago.
I was trying to make a code like this
def no(t=.001):
print("N", end='')
for i in range(1000):
print('o', end='')
time.sleep(t)
print()
So that when I call no() I would print a long "Nooooo...", waiting some time between each 'o'.
What happens instead is that the function halts, for the whole total time (1 second with the default argument), then prints the whole list.
Is this intended? And if not how should I obtain my intended effect?
What's happening here is that python is actually printing all the characters in exactly the same way that you intend - it writes the N, then an o per second to stdout. The issue is that the operating system does not display it because the file (stdout is a file) is not flushed. This typically automatically happens when \n is printed (by default, at the end of the printed string), but you'd overwritten that with end==''.
Luckily, print has an optional flush argument that you can use to force a flush. So you should be able to fix your behavior with this:
def no(t=.001):
print("N", end='', flush=True)
for i in range(1000):
print('o', end='', flush=True)
time.sleep(t)
print()

Making a delay between typed characters [duplicate]

This question already has answers here:
How can I flush the output of the print function?
(13 answers)
Closed 4 years ago.
First, look at this:
import time
wait = time.sleep
def put(char):
print(char, end='')
def text(*pieces):
for p in pieces:
for c in p:
put(p)
wait(0.25)
I wanted to make a function that prints characters one by one with a delay of 250ms. But the problem is, it doesn't actually print characters one by one, instead, nothing happens until the "for" loop ends, then the given pieces of text is printed directly at once. Can someone tell me another way to do that, as in Undertale, typing/printing/putting characters one by one with a delay? Thanks.
You need to add flush=True to your print statement, otherwise the system will wait till the for loop is done. Note: this is only done if you're printing with end=''.
wait = time.sleep
def put(char):
print(char, end='', flush=True)
def text(pieces):
print(pieces)
for p in pieces:
put(p)
wait(0.25)
text('arsasrtrasars')

Categories