如何将变量从Python脚本传递到Bash脚本

18 投票
8 回答
29155 浏览
提问于 2025-04-16 07:30

我有一个叫做 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 的一些功能,比如 headtail,只把第一行或最后一行传递给下一个程序。

撰写回答