The difference between sys.stdout.write and print? The difference between sys.stdout.write and print? python python

The difference between sys.stdout.write and print?


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 Exceptionprint("something", 1/0, "other") #doesn't print anything. The function is not called


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 syssys.stdout.write(str(99) + '\n')


Here's some sample code based on the book Learning Python by Mark Lutz that addresses your question:

import systemp = sys.stdout                 # store original stdout object for latersys.stdout = open('log.txt', 'w') # redirect all prints to this log fileprint("testing123")               # nothing appears at interactive promptprint("another line")             # again nothing appears. it's written to log file insteadsys.stdout.close()                # ordinary file objectsys.stdout = temp                 # restore print commands to interactive promptprint("back to normal")           # this shows up in the interactive prompt

Opening log.txt in a text editor will reveal the following:

testing123another line