gpt4 book ai didi

python - 将 `exec()` 输出发送到另一个流而不重定向标准输出

转载 作者:太空宇宙 更新时间:2023-11-04 04:18:44 25 4
gpt4 key购买 nike

我正在编写一个 Sublime Text 插件,它提供多个可通过 UNIX 套接字访问的 Python shell。每个 shell 都应充当在其自己的线程上运行的独立 REPL。 (这些 shell 拥有自己的进程是不可取的;共享单个进程是绝对必要的。)

如果代码是使用 mode='single' 编译的,内置的 exec() 函数会将输出打印到标准输出,并且是一个不计算为 None 的表达式。我需要通过套接字发送此输出。

我知道这可以通过 patching stdout 来完成.但是,这在这里不起作用,因为多个控制台可能在多个线程中运行(加上内置控制台)。

我的思路如下:

  • 尝试使用 mode='eval' compile() 输入,eval() 并打印结果(如果不是没有任何)。如果无法编译,请尝试使用 mode='exec' 而不是 mode='single'
  • 对于每个控制台的线程,将输出流保存在线程本地存储中。用一个对象修补 sys.stdout,该对象在调用“常规”stdout 之前检查这些流。
  • 以某种方式为每个控制台提供一个修补过的 sys

这些看起来都不是什么好主意。还有更好的吗?

最佳答案

如果您对单一进程死心塌地,那么取决于您是否愿意深入研究 CPython 实现的晦涩的 C 级特性,您可以尝试查看 subinterpreters .据我所知,这些是 CPython 在单个进程中提供的最高级别的隔离,它们允许像单独的 sys.stdout 对象这样的东西用于单独的子解释器。

关于python - 将 `exec()` 输出发送到另一个流而不重定向标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54914532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com