Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does 'python --version' not print string [duplicate]

Tags:

python

bash

I was trying to write a bash script to test the python version. However, I found python --version behave weirdly for python 2, as I can't process its output using any tool. I have tested the same script on Mac OS (10.13.5) and AWS Linux (GUN/Linux #1 SMP Fri Feb 16 00:18:48 UTC 2018). So I think the problem is related to python 2.

The script and corresponding output are:

$ echo $(python --version) | awk '{print $2}'
> Python 2.7.10

But the output should be 2.7.10.

$ echo $(python --version) > weird.txt
> Python 2.7.10
$ cat weird.txt
>

So the output cannot be written into a file as well.

The same script to test for python3 has a totally different result

$ echo $(python3 --version) | awk '{print $2}'
> 3.6.5

But python3's output can be written into a file.

$ echo $(python3 --version) > weird.txt
$ cat weird.txt
> Python 3.6.5

I have found the reason for this difference is that python --version does not output a normal string or whatsoever. Maybe it calls another command to output the result for it??? Thus the result cannot be caught by current process?? (just pure guess here)

Can anyone help me to figure out why there is the difference here? There are probably of million ways to test for python version. But I'm just super curious about what is happening here.

Thanks for all the replies. Just found a useful answer explaining that why python -V outputs to stderr: Why does python print version info to stderr?

like image 521
Haoming Yin Avatar asked Dec 17 '22 22:12

Haoming Yin


1 Answers

Python outputs the version to standard error (stderr) up to version 3.3 according to issue 18338 and as noted here, so redirect accordingly:

$ echo $(python --version 2>&1) | awk '{print $2}'
2.7.14

The command substitution is unnecessary and this could be written as:

$ python --version 2>&1 | awk '{print $2}'
like image 118
Ilja Everilä Avatar answered Jan 06 '23 05:01

Ilja Everilä