从bash中的python函数收集返回值

时间:2014-07-03 12:29:26

标签: python linux bash shell

我正在实现一个bash脚本,它将调用python脚本的函数/方法。我想将此函数的返回值收集到调用bash脚本中的局部变量中。

try1.sh包含:

#!/bin/sh
RETURN_VALUE=`python -c 'import try3; try3.printTry()'`
echo $RETURN_VALUE

现在是python脚本:

#!/usr/bin/python

def printTry():
    print 'Hello World'
    return 'true'

关于删除bash脚本:

$./tr1.sh
Hello World

没有' true'或者在那个地方任何其他类型按照需要回显到标准输出。

我希望能够做的另一件事是,我的avtual python代码将有大约20-30个函数返回我的软件状态机的各种状态值,我将从bash脚本调用这些函数。在bash脚本中,我必须将这些返回值存储在局部变量中,这些变量将在调用bash脚本中实现的状态机逻辑中进一步使用。

对于每个值,我都会做python -c' import python_module; python_module.method_name',它会一次又一次地重新枚举状态机的已定义状态,这是我不想要的。我想避免让整个python脚本只是为了调用单个函数而运行。这可能吗?

这里可以考虑哪些可能的解决方案/建议/想法?

我很感激回复。

为了澄清我的意图,任务是将部分bash脚本替换为python脚本以提高可读性。 bash脚本非常大(~15000行),因此完全不能被单个python脚本替换。因此可以用python代替可以被改进的部分。

另外,我曾想过在下面的评论中用Victor建议用python脚本替换整个bash脚本,但在我的情况下它是不可行的。因此,我必须将状态机分为bash和python,其中python将有一些必需的方法返回bash脚本所需的状态值。

此致 Yusuf Husainy。

1 个答案:

答案 0 :(得分:2)

如果你不关心python函数打印到stdout的内容,你可以这样做:

$ py_ret_val=$(python -c '
from __future__ import print_function
import sys, try3
print(try3.printTry(), file=sys.stderr)
' 2>&1 1>/dev/null)

$ echo $py_ret_val
true