Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';python——版本';不打印字符串_Python_Bash - Fatal编程技术网

为什么';python——版本';不打印字符串

为什么';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

我试图编写一个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 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())'