Shell脚本无法将命令行输出保存到变量中

3
我正在尝试使用shell脚本执行命令,然后将输出保存到变量中。所以我使用反引号,像这样:
out=`ls -l`
print $out

那段代码运行良好,我可以用它来执行其他的 shell 命令。但当我尝试执行 'python --version' 来检查 Python 版本时,遇到了奇怪的问题。反引号在执行该命令时不起作用,而在执行其他命令时正常工作,它会将输出打印到屏幕上,但不会将任何内容保存到变量 $out 中。所以,如果我执行:

out =`python --version`
print "my python version is "$out

结果:

Python 2.6.1
my python version is 

我尝试使用$()替换反引号,但没有成功。有什么想法吗?

1
反引号是旧的做法。 使用$()更易读。 - OlivierLi
1个回答

10

你的等号前面有一个空格:

out =`python --version`

应该是:

out=`python --version`

更新

同时,Python会将版本字符串输出到标准错误流(stderr),因此您需要将其重定向到标准输出流(stdout):

out=`python --version 2>&1`

2
完美,非常感谢。现在它运行得很好。就像你说的那样,问题是Python将其输出到stderr。out = `python --version 2>&1`可以工作!谢谢。 - andio
我正在编写一个 pre-commit 钩子,但是无法弄清楚为什么输出没有被保存。你的 2>&1 技巧非常好用!谢谢! - NateW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接