Tal*_*aul 5 python bash scripting return multiple-value
我有一个调用python脚本的bash脚本.起初我只是返回一个变量,这很好,但现在我被告知返回两个变量,我想知道是否有一个简洁的方法来返回多个变量.
archiveID=$(python glacier_upload.py $archive_file_name $CURRENTVAULT)
Run Code Online (Sandbox Code Playgroud)
我是用bash打电话的
print archive_id['ArchiveId']
archive_id['ArchiveId']
Run Code Online (Sandbox Code Playgroud)
这会将归档ID返回给bash脚本
通常我知道你可以在python中使用return语句来返回多个变量,但是它只是一个脚本,就像我发现返回变量一样.我可以使它成为一个被调用的函数,但即便如此,我将如何收到我将要传回的多个变量?
从你的python脚本,每行输出一个变量.然后从你的bash脚本,每行读取一个变量:
蟒蛇
print "foo bar"
print 5
Run Code Online (Sandbox Code Playgroud)
巴什
#! /bin/bash
python main.py | while read line ; do
echo $line
done
Run Code Online (Sandbox Code Playgroud)
谢谢Guillaume!你给了我灵魂的一个很好的起点.我将在这里为其他人发布我的解决方案.
#! /bin/bash
array=()
while read line ; do
array+=($line)
done < <(python main.py)
echo ${array[@]}
Run Code Online (Sandbox Code Playgroud)
我在这里找到了我需要的其余解决方案
我最喜欢的方式是直接阅读列表:
x=($(python3 -c "print('a','b','c')"))
echo ${x[1]}
b
echo ${x[*]}
a b c
Run Code Online (Sandbox Code Playgroud)
出于这个原因,如果 my_python_function 返回一个元组,我会使用 format 来确保我只得到空格分隔的结果:
#Assuming a tuple of length 3 is returned
#Remember to quote in case of a space in a single parameter!
print('"{}" "{}" "{}"'.format(*my_python_function())
Run Code Online (Sandbox Code Playgroud)
如果您希望这是通用的,则需要构造格式字符串:
res = my_python_function()
print(("{} "*len(res)).format(*res))
Run Code Online (Sandbox Code Playgroud)
是一种方式。无需担心多余的空间,但您可以在格式字符串上使用 [:-1] 来摆脱它。
最后,如果您需要多字参数(即单个参数中有一个空格,您需要添加引号和一个间接级别(我假设您将只运行自己的“安全”脚本):
#myfile.py
res = my_python_function()
print(('"{}" '*len(res)).format(*res))
#my file.bash
eval x=($(python3 myfile.py))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3555 次 |
| 最近记录: |