在bash中收集python函数的返回值
我正在写一个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
在输出中没有看到'真'或者其他任何我想要的类型。
我还想做的另一件事是,我的实际python代码大约有20到30个函数,这些函数会返回我软件状态机的各种状态值,我会从bash脚本中调用这些函数。在bash脚本中,我需要把这些返回值存储在局部变量中,以便在后面的状态机逻辑中使用。
对于每个值,我都得用python -c 'import python_module; python_module.method_name',这会一次又一次地重新枚举状态机的定义状态,我不想这样。我希望避免为了调用一个单独的函数而让整个python脚本运行。这样做有可能吗?
这里有什么可能的解决方案、建议或想法吗?
我会很感激大家的回复。
为了澄清我的意图,这个任务是希望用python脚本的一部分来替代bash脚本的一部分,以提高可读性。bash脚本真的很大(大约15000行),所以不能完全用一个python脚本替代。因此,可以识别出需要改进的部分可以用python替代。
另外,我曾考虑过完全用python脚本替代整个bash脚本,正如Victor在下面的评论中建议的那样,但在我的情况下这并不可行。因此,我需要将状态机分成bash和python两部分,其中python会有一些必要的方法来返回bash脚本所需的状态值。
祝好,
Yusuf Husainy。
1 个回答
3
如果你不在乎这个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