如何避免从Bash脚本多次调用Python解释器?

如何避免从Bash脚本多次调用Python解释器?,python,bash,language-interoperability,Python,Bash,Language Interoperability,我正在从事一个涉及两个主要组件的项目,一个使用Bash命令行界面,另一个使用pythonapi。出于这个问题的目的,假设这两个组件都不能修改为使用不同的语言进行接口 我现在需要编写一些使用这两个组件特性的脚本。我想到了两种可能的方法:(a)编写调用Python解释器的Bash脚本,以便与Python组件交互,或者,(b)使用调用os.system或类似的方法编写Python脚本,这允许运行Bash命令 编写Bash脚本的问题是,我经常需要从循环中的Python组件调用函数,类似这样: while

我正在从事一个涉及两个主要组件的项目,一个使用Bash命令行界面,另一个使用pythonapi。出于这个问题的目的,假设这两个组件都不能修改为使用不同的语言进行接口

我现在需要编写一些使用这两个组件特性的脚本。我想到了两种可能的方法:(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
读取-r行时
;做
echo“现在处理文件的下一行。”
python-c“来自my_模块导入*;my_函数('${line}')”
#一些bash命令
完成
我不喜欢多次调用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
mkfifo输入输出
python-ic“从my_模块导入*”输出&exec 3>in 4&3
#读取我的函数的结果
读r&-

执行官4python回复?将stdin发送到repl?@AlexanderMills我希望能够做这样的事情,但我以前从未见过命名管道。迭戈的回答向我展示了如何做到这一点。不过,谢谢你的建议!这正是我所希望的!谢谢