如何将变量从Python脚本传递到Bash脚本
我有一个叫做 a.sh 的 bash 脚本,在里面我调用了一个 Python 脚本 b.py。
这个 Python 脚本用来计算一些东西,我想让它返回一个值,以便在 a.sh 中后续使用。
我知道我可以这样做:
var=`python b.py`
在 b.py 中:
print x # when x is the value I want to pass
但是这样做不太方便,因为我在 b.py 中还会打印其他信息。
有没有更好的方法呢?
编辑:
现在我做的就是:
var=`python b.py | tail -n 1`
这意味着我可以在 b.py 中打印很多东西,但只有最后一行(最后一个打印命令,假设它里面没有 "\n")会被存储到 var 变量里。
谢谢大家的回答!
8 个回答
2
在你的Python脚本中,把其他信息重定向到错误输出(stderr),然后把x
打印到标准输出(stdout):
import sys
...
print >>sys.stderr, "another message"
print x
在bash脚本中:
...
var=`python b.py 2>/dev/null`
另外,如果x是一个在0到255之间的整数,你可以用退出代码把它传递给bash:
import sys
...
sys.exit(x)
在bash中:
python b.py
var=$?
请注意,退出代码是用来表示错误的,0表示没有错误,这样做有点不符合常规。
4
我觉得答案是
.py
import sys
a=['zero','one','two','three']
b = int(sys.argv[1])
###your python script can still print to stderr if it likes to
print >> sys.stderr, "I am no converting"
result = a[b]
print result
.sh
#!/bin/sh
num=2
text=`python numtotext.py $num`
echo "$num as text is $text"
12
我会把它打印到命令行上选择的一个文件里,然后我可以用类似 cat
的命令在 bash 中获取这个值。
所以你可以这样做:
python b.py tempfile.txt
var=`cat tempfile.txt`
rm tempfile.txt
[编辑,基于其他答案的另一个想法]
你还有一个选择,就是仔细格式化你的输出,这样你就可以使用 bash 的一些功能,比如 head
或 tail
,只把第一行或最后一行传递给下一个程序。