首页 > 解决方案 > 在 swift 中将 python 交互式控制台作为子进程运行,并在启动后发送命令和接收结果

问题描述

我正在迈出 macOS 应用程序开发的第一步。我正在尝试在 Swift 上编写一个可以保持 python 交互式控制台打开的应用程序。有时我想发送到 python 命令并将结果返回给 swift,但不关闭 python 以保留我将发送的下一个命令的所有变量。

有没有办法做到这一点?

据我了解,我不能使用,Process()因为当我运行任务时输入管道会自动关闭。

我可能需要使用带有 pty 和 tty 的伪终端,但我并不完全理解这个想法以及在哪里了解它。(或者,也许,我错了,还有另一种方法)

标签: pythonswiftmacosttypty

解决方案


如果你真的想使用 swift 的 python 代码,我强烈建议你避免使用这种方法。它非常容易出错,并且可能会受到限制且效率低下。你最好使用一些 python-c-api 的包装器,或者在 python 中编写一些小型服务器来接收来自 swift 的请求。

如果你仍然想这样做,一个简单的方法是使用 python 本身在 pty 中生成 python:

python -c "import pty, sys; pty.spawn(sys.argv[1:])" python

这将启动一个 python 控制台,该控制台读取和写入 stdio 而不是/dev/tty.


推荐阅读