如何避免从Bash脚本多次调用Python解释器?
我正在研究一个涉及两个主要组件的项目,一个使用Bash命令行界面,另一个使用Python API。为了这个问题的目的,假定这些组件都不能被修改为使用不同的界面语言。如何避免从Bash脚本多次调用Python解释器?
我现在需要编写一些使用这两个组件的功能的脚本。我有两种可能的方法:(a)编写调用Python解释器的Bash脚本来与Python组件接口,或者(b)使用调用os.system
或类似的东西来编写Python脚本,这允许人们运行Bash命令。
写作Bash脚本的问题是,我经常需要调用从Python组件的功能在一个循环中,这样的事情:
while read -r line ; do
echo "Now handling the next line of the file."
python -c "from my_module import *; my_function('${line}')"
# some bash commands
done < some_file.txt
我不喜欢叫Python解释器的开销这么多次,而且也经常这样做。有没有办法启动解释器并导入模块一次,然后在该上下文中动态调用其他函数?请记住,我将在Python函数调用之间使用其他Bash命令。
编写Python脚本的问题在于,无论何时我们需要使用命令行界面访问组件,我们都必须使用对os.system
或类似内容的调用。有些脚本只包含对命令行界面的调用,这意味着我将在每行使用os.system
的Python脚本。我也不喜欢这个。
这些脚本,无论用Python还是Bash编写,都会用于单元测试,因此可读性,可维护性和可扩展性比纯速度更高。此外,为了一致性,所有这些应该用相同的语言编写。
我希望有人能指导我解决这个问题的最优雅的解决方案。提前致谢!
可以在bash
做到这一点:
mkfifo in out
python -ic 'from my_module import *' <in >out & exec 3> in 4< out
while read -r line ; do
echo "Now handling the next line of the file."
echo "my_function('$line')" >&3
# read the result of my_function
read r <&4; echo $r
# some bash commands
done < some_file.txt
exec 3>&-
exec 4<&-
rm in out
,你可以发送命令到python
,同时继续执行bash
命令。
这正是我所希望的!谢谢! – jdw1996
python repl?发送stdin到repl? –
@AlexanderMills我希望能够做到这样的事情,但我之前没有看到有名的管道。迭戈的回答告诉我如何做到这一点。还是)感谢你的建议! – jdw1996