【问题标题】:How to return multiple variables from python to bash如何将多个变量从python返回到bash
【发布时间】:2013-06-18 18:48:29
【问题描述】:

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

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

是我从 bash 打的电话

print archive_id['ArchiveId']
archive_id['ArchiveId']

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

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

【问题讨论】:

    标签: python bash scripting return multiple-value


    【解决方案1】:

    我最喜欢的方式是直接读入一个列表:

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

    因此,如果 my_python_function 返回一个元组,我会使用格式来确保我只得到空格分隔的结果:

    #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())
    

    如果您希望这是通用的,则需要构造格式字符串:

    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))
    

    【讨论】:

    • 感谢分享另一种方式:)
    【解决方案2】:

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

    Python

    print "foo bar"
    print 5
    

    重击

    #! /bin/bash
    
    python main.py | while read line ; do
        echo $line
    done
    

    最终解决方案:

    感谢纪尧姆!你给了我一个很好的起点。我只是在这里为其他人发布我的解决方案。

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

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

    【讨论】:

    • 你也可以说 mapfile -t array &lt; &lt;(python main.py) -- 在 bash 提示符下查看 help mapfile
    猜你喜欢
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多