我编写一个C++程序,它将运行Python 3解释器作为子进程,然后连接两个Linux匿名管道——一个到它的^ {CD1>}和^ {CD2>},第二个到解释器的^ {CD3>},然后通过这些通道与它通信。在
我需要在交互模式下运行Python,即使用输入管道向它传递一个命令,然后在输出管道上等待答案。一切都很好,但似乎Python只能在stdout和{}连接到tty时才能运行交互模式
Python文档引用:The interpreter operates somewhat like the Unix shell: when called with standard input connected to a tty device, it reads and executes commands interactively; when called with a file name argument or with a file as standard input, it reads and executes a script from that file.
实际上,当我用管道而不是tty运行解释器时,在命令被发送之后,我在响应管道中看不到任何东西。在
那么-我可以用某种方式解决这种行为,让python3解释器完全按照用户从终端启动的方式工作吗?在
简单来说,问题是:
我需要将Python集成到我的C++服务器应用程序中,以允许客户端执行Python命令。
在服务器中嵌入解释器看起来不是个好主意,主要是出于安全考虑(用户可能会损坏服务器或服务器的数据,而且服务器是以我不想授予用户的某些权限运行的)。在
另一种可能的解决方案是以CLI方式(命令模式)使用解释器。主要的问题是-然后我需要导入一些模块并预执行一些代码,以向用户提供我的服务器环境和一些API。在用每一个命令调用解释器之前做这件事太重了(这些操作相当复杂,包括建立网络连接)
因此,在一个单独的进程中运行解释器,并使用IPC机制与之通信的服务器似乎不是什么坏主意。在
不管怎样,如果你有什么建议的话,我很乐意看看你的建议。在