在bash脚本中执行Python代码字符串
我遇到了一种情况,在我写的bash脚本中使用python会很方便。我在脚本中调用了一些可执行文件,然后想用python做一点简单的数据处理,再继续执行其他操作。为了这点处理,写一个专门的脚本似乎不太划算。
所以我想做的事情大概是这样的:
# do some stuff in bash script
# write some data into datafile.d
python_fragment= << EOF
f = open("datafile.d")
// do some stuff with opened file
print(result)
EOF
result=$(execute_python_fragment $python_fragment) # <- what I want to do
# do some stuff with result
其实我只想执行一段包含python代码的字符串。当然,我可以单独写一个文件,把python代码放进去,然后执行那个文件,但我不太想这样做。我可以用echo $python_fragment > temp_code_file的方式,把代码写入一个临时文件,然后再执行这个临时文件,但这样感觉不太优雅。我就是想直接执行这段字符串,如果可以的话。
我想做的事情看起来很简单,但我还没找到解决办法,也没在网上找到相关的答案。
谢谢!
相关问题:
- 暂无相关问题
4 个回答
0
如果这个字符串里面包含了完整的Python代码,那么这个简单的 eval()
函数就可以用来执行它。
下面是一个非常简单的例子:
>>> eval("print(2)")
2
希望这对你有帮助。
0
也许可以像这样做:
result=$(echo $python_fragment | python3)
唯一的问题是,问题中的 heredoc 赋值也不管用。不过,这个链接提供了一种方法,如果你想这样做的话:
python_fragment=$(cat <<EOF
print('test message')
EOF
) ;
result=$(echo $python_fragment | python3)
echo result was $result
4
你可以直接在命令行中运行一个Python命令,方法是使用-c这个选项。
python -c 'from foo import hello; print (hello())'
然后在bash中,你可以这样做:
result=$(python -c '$python_fragment')
2
你只需要把这个这里字符串/文档重定向到 python
。
python <<< "print('Hello')"
或者
python <<EOF
print('Hello')
EOF
把它放在一个函数里。
execute_python_fragment() {
python <<< "$1"
}
现在你就可以进行你的操作了。
result=$(execute_python_fragment "${python_fragment}")
你还应该添加一些错误控制和输入清理……这取决于你需要在这个函数中达到什么样的安全级别。