为什么';python——版本';不打印字符串
我试图编写一个bash脚本来测试python版本。然而,我发现Python2的为什么';python——版本';不打印字符串,python,bash,Python,Bash,我试图编写一个bash脚本来测试python版本。然而,我发现Python2的python--version行为异常,因为我无法使用任何工具处理其输出。我已经在Mac OS(10.13.5)和AWS Linux(GUN/Linux#1 SMP Fri Feb 16 00:18:48 UTC 2018)上测试了相同的脚本。所以我认为这个问题与Python2有关 脚本和相应的输出为: $ echo $(python --version) | awk '{print $2}' > Python
python--version
行为异常,因为我无法使用任何工具处理其输出。我已经在Mac OS(10.13.5)和AWS Linux(GUN/Linux#1 SMP Fri Feb 16 00:18:48 UTC 2018)上测试了相同的脚本。所以我认为这个问题与Python2有关
脚本和相应的输出为:
$ 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:
Python根据和如上所述将版本输出到版本3.3,因此相应地重定向:
$ echo $(python --version 2>&1) | awk '{print $2}'
2.7.14
命令替换是不必要的,可以写成:
$ python --version 2>&1 | awk '{print $2}'
如何使用Python命令本身,使用它的
平台库(这是一种非常常见的用法)
当我运行它时,我得到了Python的确切版本。我不是100%确定,但你不是只捕获标准输出而忽略标准输出吗?如果在尝试写入文件的末尾添加2>&1
,会发生什么情况?此外,您可以通过以下方式找到版本:python-c“import sys;print(sys.version)”>version
@JussiV事实证明,这是实际问题。。但TBH,谁知道它会将版本打印到stderr。facepalming…@HaomingYin:python
并不是唯一的,ksh
(Korn shell)、gcc
和clang
也做同样的事情,可能还有其他的。@Inian这不像你标记的那样是重复的,它不是关于确定版本,而是弄清楚某些python版本的版本输出会发生什么。我不知道如何或者我缺少代表来质疑国旗,所以让我们试试这个。谢谢,这是一个快速的回答。知道他们为什么要把它输出到stderr吗?这真让人困惑。你不需要这里的echo
,只要python--version 2>&1 | awk'{print$2}'
我之所以“echo”它,是因为我认为它可以捕获stdout的所有内容。。但显然我错了
python -c 'import platform; print(platform.python_version())'