Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the point of "stderr" in Python?

I'm a programming newbie and I'm trying to understand how stdin, stdout, and stderr work. As I understand it, stdout and stderr are two different places where we can direct output from programs. I guess I don't understand what's the point of having a second "stream" of output just for errors with stderr? Why not have errors on the regular stdout? What does having errors on stderr allow me to do (basically why is stderr useful)?

like image 518
secretagentmango Avatar asked Jun 12 '18 13:06

secretagentmango


People also ask

What is stderr in Python?

Read from stdin in python Python stderr is known as a standard error stream. It is similar to stdout because it also directly prints to the console but the main difference is that it only prints error messages.

How to print to stderr and stdout in Python?

- GeeksforGeeks How to print to stderr and stdout in Python? In Python, whenever we use print () the text is written to Python’s sys.stdout, whenever input () is used, it comes from sys.stdin, and whenever exceptions occur it is written to sys.stderr. We can redirect the output of our code to a file other than stdout.

How to read from stdin in Python?

Read from stdin in python Python stderr is known as a standard error stream. It is similar to stdout because it also directly prints to the console but the main difference is that it only prints error messages. After writing the above code (python print to stderr), you can observe that it print debug message using sys.stderr.

What is the output of stdout in Python?

Python stdout is known as standard output. Here, the write function will print directly whatever string you will give. After writing the above code (python stdout), the output will be ” Welcome to python”. We get the output to the console as we write sys.stdout.


1 Answers

There are two "points" to supporting distinct stout and stderr streams:

  1. When you are writing applications that can be chained together (e.g. using pipelines) you don't want the "normal" output to get mixed up with errors, warnings, debug info and other "chit chat". Mixing them in the same stream would make life difficult for the next program in the chain / pipeline.

    Example:

    $ cat some-file | grep not $ echo $?

    If the cat command did not write its error messages to stderr, then the grep command would see a "file not found" message if "some-file" did not exist. It would then (incorrectly) match on the "not", and set the return code for the pipeline incorrectly. Constructing pipelines that coped with this sort of thing would be hellishly difficult.

  2. Separate stdout and stderr streams have been support in (at least) UNIX and UNIX-like system since ... umm ... the 1970's. And they are part of the POSIX standard. If a new programming language's runtime libraries did not support this, then it would be considered to be crippled; i.e. unsuitable for writing production quality applications.

    (In the history of programming languages, Python is still relatively new.)

However, nobody is forcing to write your applications to use stderr for its intended purpose. (Well ... maybe your future co-workers will :-) )

like image 126
Stephen C Avatar answered Oct 17 '22 22:10

Stephen C