在后台启动 Repl/CLI 和 Feed 命令

在后台启动 Repl/CLI 和 Feed 命令

假设pythonrepl 需要很长时间才能启动,有没有办法在后台启动它,以便我可以创建一个别名并为其提供诸如python-current "command to run".

答案1

python 发行版中没有任何东西可以进行这种打开,“包含电池”也不例外。

像编辑器这样的程序可以处理这类事情,因为当您打开另一个文件时,要做什么非常清楚:您只需在新文件上打开一个窗口/选项卡,由相同的可执行文件处理。

自己实现这样的事情并不困难,但是您必须考虑当第一个命令尚未完成而第二个命令已安排时会发生什么:

  • 中止第一个命令
  • 将第二个命令排队
  • 并行运行(这需要额外的启动时间,除非有多个线程等待命令)

我已经通知运行 python 来加载和执行基于扫描目录中的文件、http 请求(在基于扭曲的系统上)和 Zeromq 的模块。恕我直言,什么是合适的取决于系统还需要什么,我总是选择有效且开销最小的。您python-current必须进行适当的接口。

通常这与重新加载某些模块相结合(以处理新命令)。为此,您可以使用reload()内置的:

import mycommand
# test for a command that requires reloading
reload(mycommand)


顺便说一句:特别是在使用 UI 代码时,我发现这种重新加载很有用。 Python 加载可执行文件与 Perl 相当(在我几年前的系统上为 0.002 秒time python -v)。加载基本模块大约需要十倍的时间(time python -c "exit();", 0.025s). But when using UI based programs the whole startup easily grows to several seconds and more. And in that case implementing dynamic command reading and having apython-current` 是有道理的。

答案2

如果你使用bash你可以尝试协进程。克什也有协进程,我不确定这两个 shell 在这方面是否具有相同的功能。我只尝试过 Ksh 版本(我的雇主喜欢 klunk,所以我们使用 Ksh)并且它有效,但是拥有多个协进程并不容易。

谷歌搜索“ksh coprocess example”或“bash coprocess example”,您将找到示例代码。从示例开始工作,因为整个事情并不是超级直观。

相关内容