The difference between sys.stdout.write and print?

sys.stdout.write format
sys.stdout.write newline
sys.stdout.write \r
sys.stdout.write flush
sys.stdout.write not working
python print vs write
python sys stdout write json
format stdout python

Are there situations in which sys.stdout.write() is preferable to print?

(Examples: better performance; code that makes more sense)

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

print() vs sys.stdout.write(): which and why?, The print function first converts the object to a string (if it is not already a string). The print function will also put a space before the object if it is  Answers: print is just a thin wrapper that formats the inputs (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.

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')

The difference between sys.stdout.write and print?, print() adds a newline to the given string, sys.stdout.write() takes a str() and which it encodes to sys.stdout.encoding and writes the resulting bytes() object to  The print function 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 you use stdout , that time you need to convert the object to a string by yourself and you will do it by calling "str", and there is no newline character.

My question is whether or not there are situations in which sys.stdout.write() is preferable to print

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.

What is the difference between print(), sys.stdout.write(), and sys , If value is not None, this function prints it to sys.stdout, and saves it in builtins._. epsilon, DBL_EPSILON, difference between 1 and the least value greater than 1 is acceptable as long as it has a write() method that takes a string argument. It uses write function of file arguement object and prints end arguement as last character That means it uses sys.stdout.write by default to print statement to the screen . Sys.stdout.write returns number of bytes as return value. Print is some wrapper on top of sys.stdout.write.

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

27.1. sys — System-specific parameters and functions, This page provides Python code examples for sys.stdout.write. outni.​set_data_dtype('float64') outni.to_filename(name) print 'done. folder structure for subdir in ['corrected','projected','differences','final']: for folder in self.folders: abspath  print() writes to sys.stdout and adds a ' ' character to the end unless the last argument is a comma sys.stdout is a file like object that has a write() method so it could be anything (file, socket, etc) and defaults the screen in an interactive console or script.

There's at least one situation in which you want sys.stdout instead of print.

When you want to overwrite a line without going to the next line, for instance while drawing a progress bar or a status message, you need to loop over something like

Note carriage return-> "\rMy Status Message: %s" % progress

And since print adds a newline, you are better off using sys.stdout.

sys.stdout.write Python Example, Are there situations in which sys.stdout.write() is preferable to print? (Examples: better performance; code that makes more sense). python printing stdout. print is just a thin wrapper that formats the inputs (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.

The difference between sys.stdout.write and print?, print is just a thin wrapper that formats the inputs (space between args and newline at the end) and calls the write function of a given object. My question is whether or not there are situations in which sys.stdout.write() is preferable to print If you're writing a command line application that can write to both files and stdout then it is handy.

Python, Writes text to standard output. import sys sys.stdout.write("This") sys.stdout.write("​Is") sys.stdout.write("Single") sys.stdout.write("Line") #prints ThisIsSingleLine to  The difference between sys.stdout.write and print? print is just a thin wrapper that formats the inputs (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.

python docs sys.stdout.write print without new lines.txt, stdout is a file-like object; calling its write function will print out whatever string you give it. return to the end of the string you're printing, and calls sys.stdout.​write. the file for us, and it doesn't make any difference that stderr is never restored,  Using this instead of print(), you can a send your text directly to the console, like so: There are a few differences between using print() and sys.stdout.write, though. First, all new lines must be explicitly stated; it doesn’t write them for you (like the print statement).

Comments
  • Which version of Python? 2.x or 3.x?
  • Honestly I'd like to know for both, although I have no experience with Python 3. Updated the question.
  • @S.Lott : asking for the basic differences between sys.stdout.write() and print (and/or why Python has both) is a perfectly reasonable question and does not need examples. OP did not say the command syntax was confusing.
  • It's also worth noting that print also appends a newline to whatever you write which doesn't happen with sys.stdout.write.
  • Also sys.stdout.write is more universal if you ever need to write dual-version code (e.g. code that works simultaneously with Python 2.x as well as Python 3.x).
  • @MichaelMior You can suppress the newline that print appends with a trailing comma: print "this",; print "on the same line as this"
  • @bjd2385 The >> is not the rshift operator here but a specific "chevron" form of the print statement. See docs.python.org/2/reference/…
  • sys.stdout.write() also buffers the input and might not flush the input to the fd immediately. in order to make sure that it behaves like the print function, you should add: sys.stdout.flush()
  • +1 for mentioning the newline character! This is the main difference between print and .write(), I'd say.
  • NOTE: print can be made to omit the newline. In Python 2.x, put a comma at the end, and a space character will be output, but no newline. E.g. print 99, In Python 3, print(..., end='') will avoid adding newline (and also avoid adding space, unless you do end=' '.
  • @EOL How funny is that, that someone named EOL makes a comment about '\n'... It made me laugh. I have no life. Kill me.
  • that's NOT true, print operation behaves slightly different in signal handlers in python2.X, i.e. print can not be replaced with sys.stdout in example: stackoverflow.com/questions/10777610/…
  • huh? Are you sure this is a difference between print() and sys.stdout.write(), as opposed to the difference between stdout and stderr? For debugging, you should use the logging module, which prints messages to stderr.