繁体   English   中英

如何将 python 脚本的多个输出传递给 shell bash 脚本?

[英]How do I pass multiple outputs of a python script to a shell bash script?

我需要一个 python 脚本来计算一些数值,在下一步中,这些数值被传递给另一个 shell bash 脚本以继续以下计算。 假设 python 脚本是./python.py ,它是:

import numpy as np
def func(arg1, arg2):
    ...
    result1=0.111
    result2=0.222
    result3=0.333
    return result1, result2, result3
arg1=1
arg2=2
result1, result2, result3 = func(arg1, arg2)
print(result1, result2, result3)

bash 脚本是./bash.sh ,其中包含:

#!/bin/bash
...
~/.conda/envs/vegetation/bin/python split_nc_domain.py
...(following part which needs result1, result2, result3)

那么如何将result1, result2, result3传递给./bash.sh呢? 我知道如果我只有一个输出,我可以使用以下命令: VARIABLE=`~/.conda/envs/vegetation/bin/python split_nc_domain.py`VARIABLE=$(~/.conda/envs/vegetation/bin/python split_nc_domain.py) 但是我该如何处理来自 python 的多个输出呢? 谢谢!


更新:

有人在评论中建议我使用x=($(~/.conda/envs/vegetation/bin/python split_nc_domain.py)) 但是下一步我能做什么? 有没有像x[0], x[1], x[2]来检查? 通过echo $x我只能看到第一个值0.111 ,它是第一个变量的值。

假设您的 python 脚本无法更改,我们必须使用以下格式从 bash 工作:

first_value second_value third_value

其中单个空格分隔三个字段。 请注意,包含空格的值会破坏该格式(创建额外的字段),但在python打印的数字的上下文中,如果可能的话,这似乎不太可能。

分别检索这三个值的基本方法是将整个值存储在文本变量中,然后执行三个命令分别检索这三个值:

whole_output="$(./python.py)"
first_value="$(echo "$whole_output" | cut -d' ' -f1)"
second_value="$(echo "$whole_output" | cut -d' ' -f2)"
third_value="$(echo "$whole_output" | cut -d' ' -f3)"

这依赖于$(command substitution) ,它首先被解释,执行它包含的命令,然后在执行包含它的命令之前被它的输出替换。
例如,对于第一行,首先将执行您的 python 脚本,然后命令将变为whole_output="first_value second_value third_value"这是一个基本分配。
使用的cut命令允许您指定分隔符(此处为空格)和要检索的字段的索引。

你可以在这里试试

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM