我试图编写一个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?
答案 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的确切版本。