The difference between sys.stdout.write and print?
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Luau
--
Chapters
00:00 The Difference Between Sys.Stdout.Write And Print?
00:18 Accepted Answer Score 367
01:28 Answer 2 Score 188
01:59 Answer 3 Score 52
02:29 Answer 4 Score 41
02:55 Answer 5 Score 18
03:19 Thank you
--
Full question
https://stackoverflow.com/questions/3263...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #printing #stdout
#avk47
ACCEPTED ANSWER
Score 367
print is just a thin wrapper that formats the inputs (modifiable, but by default with a space between args and newline at the end) and calls the write function of a given object. By default this object is sys.stdout, but you can pass a file using the "chevron" form. For example:
print >> open('file.txt', 'w'), 'Hello', 'World', 2+3
See: https://docs.python.org/2/reference/simple_stmts.html?highlight=print#the-print-statement
In Python 3.x, print becomes a function, but it is still possible to pass something other than sys.stdout thanks to the fileargument.
print('Hello', 'World', 2+3, file=open('file.txt', 'w'))
See https://docs.python.org/3/library/functions.html#print
In Python 2.6+, print is still a statement, but it can be used as a function with
from __future__ import print_function
Update: Bakuriu commented to point out that there is a small difference between the print function and the print statement (and more generally between a function and a statement).
In case of an error when evaluating arguments:
print "something", 1/0, "other" #prints only something because 1/0 raise an Exception
print("something", 1/0, "other") #doesn't print anything. The function is not called
ANSWER 2
Score 188
print first converts the object to a string (if it is not already a string). It will also put a space before the object if it is not the start of a line and a newline character at the end.
When using stdout, you need to convert the object to a string yourself (by calling "str", for example) and there is no newline character.
So
print 99
is equivalent to:
import sys
sys.stdout.write(str(99) + '\n')
ANSWER 3
Score 52
Here's some sample code based on the book Learning Python by Mark Lutz that addresses your question:
import sys
temp = sys.stdout                 # store original stdout object for later
sys.stdout = open('log.txt', 'w') # redirect all prints to this log file
print("testing123")               # nothing appears at interactive prompt
print("another line")             # again nothing appears. it's written to log file instead
sys.stdout.close()                # ordinary file object
sys.stdout = temp                 # restore print commands to interactive prompt
print("back to normal")           # this shows up in the interactive prompt
Opening log.txt in a text editor will reveal the following:
testing123
another line
ANSWER 4
Score 41
My question is whether or not there are situations in which
sys.stdout.write()is preferable to
After finishing developing a script the other day, I uploaded it to a unix server. All my debug messages used print statements, and these do not appear on a server log. 
This is a case where you may need sys.stdout.write instead.