如何从python返回多个变量到bash

2024-10-01 09:18:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个bash脚本,它调用python脚本。一开始我只返回一个变量,这很好,但现在我被告知返回两个变量,我想知道是否有一种简单明了的方法可以返回多个变量。在

archiveID=$(python glacier_upload.py $archive_file_name $CURRENTVAULT)

是我从bash打的电话

^{pr2}$

这会将归档id返回到bash脚本

通常我知道您可以在python中使用return语句返回多个变量,但是它只是一个脚本,我发现这是返回变量的方式。我可以让它成为一个可以被调用的函数,但是即使这样,我如何接收要传递回来的多个变量呢?在


Tags: 方法namepy脚本bashidreturnfile
2条回答

我最喜欢的方式是直接阅读列表:

x=($(python3 -c "print('a','b','c')"))
echo ${x[1]}
b
echo ${x[*]}
a b c

因此,如果我的python_函数返回一个元组,我将使用format来确保只得到以空格分隔的结果:

^{pr2}$

如果要使其通用,则需要构造格式字符串:

res = my_python_function()
print(("{} "*len(res)).format(*res))

是一种方式。不需要担心额外的空间,但是可以在格式字符串上使用[:-1]来删除它。在

最后,如果您需要多字参数(即单个参数中有一个空格,则需要添加引号和一个间接级别(我假设您只运行自己的“安全”脚本):

#myfile.py
res = my_python_function()
print(('"{}" '*len(res)).format(*res))

#my file.bash
eval x=($(python3 myfile.py))

从python脚本中,每行输出一个变量。然后从bash脚本中,每行读取一个变量:

Python

print "foo bar"
print 5

巴什

^{pr2}$

最终解决方案:

谢谢纪尧姆!你给了我一个很好的起点。我只想把我的解决方案贴在这里给别人看。在

#! /bin/bash

array=()
while read line ; do
  array+=($line)
done < <(python main.py)
echo ${array[@]}

我找到了我需要的其余解决方案here

相关问题 更多 >