为什么' python --version'不打印字符串

时间:2018-06-07 07:19:38

标签: python bash

我试图编写一个bash脚本来测试python版本。但是,我发现python --version对于python 2表现得很奇怪,因为我无法使用任何工具处理其输出。我在Mac OS(10.13.5)和AWS Linux(GUN / Linux#1 SMP Fri Feb 16 00:18:48 UTC 2018)上测试了相同的脚本。所以我认为这个问题与python 2有关。

脚本和相应的输出是:

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

但输出应为2.7.10。

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

因此输出也不能写入文件。

测试python3的相同脚本具有完全不同的结果

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

但是python3的输出可以写入文件。

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

我发现造成这种差异的原因是python --version没有输出普通字符串或其他任何内容。也许它调用另一个命令来输出结果???因此结果不能被当前的过程捕获? (这里只是猜测)

任何人都可以帮我弄清楚为什么会有区别吗?可能有百万种方法来测试python版本。但我对这里发生的事情非常好奇。

感谢所有回复。刚刚找到一个有用的答案解释为什么python -V输出到stderr: Why does python print version info to stderr?

2 个答案:

答案 0 :(得分:8)

根据standard error (stderr)和注意issue 18338,Python将版本输出到here,最高版本为3.3,因此会重定向:

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

命令替换是不必要的,可以写成:

$ python --version 2>&1 | awk '{print $2}'

答案 1 :(得分:3)

如何使用Python命令本身使用它的platform库(这在使用中非常常见)。

python -c 'import platform; print(platform.python_version())'

当我运行它时,我得到了Python的确切版本。