我正在实现一个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。
答案 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