【问题标题】:Linux: write to stdin of python interpreter process and have that process evaluate input as codeLinux:写入python解释器进程的标准输入并让该进程将输入评估为代码
【发布时间】:2014-04-11 17:47:37
【问题描述】:

我正在运行 gnu linux(具体来说是 Linux Mint)。以下是我想要的工作流程:

  1. 我在(比如说)进程 1000 中打开 vim,然后在进程 1001 中启动 python 解释器。
  2. 我在 vim 中编写了一些代码,然后选择某些行,然后将这些行写入文件/proc/1001/fd/0
  3. 此时我希望 python 解释器将其解释为代码并像直接输入一样执行它。

这不能按预期工作。相反,文本显示在解释器的屏幕上,但不执行(类似于在 bash 中显示子进程的错误消息时)。我认为这与我的工作流程与 readline (或某种等效库)不兼容的事实有关。或者我的问题可能只是 python 解释器从未被设计为以这种方式使用(可能是出于安全性和其他原因)。

我知道有许多具有类似功能的 IDE,但我希望一些简单的东西可能会起作用。我很好奇它是否可以修复,或者我是否误解了一些基本的东西。

【问题讨论】:

  • 如果将代码直接粘贴到解释器会发生什么?
  • 有关您的字面问题的答案,请参阅this answerthis answer
  • 感谢您的信息!我发现它比我想象的要复杂,但考虑到窗口系统的要求是有道理的。
  • Raydel:如果我将代码直接粘贴到解释器中,一切都很好。关键似乎是我误解了窗口系统如何将标准输入多路复用到不同的窗口。 Michael 的链接中对此进行了解释。

标签: python linux bash vim readline


【解决方案1】:

它存在,它被称为vim-slime

唯一的要求是您在 tmuxscreen 中运行 Python 解释器,甚至更好:byobu

如果你使用vim-pathogen,安装vim-slime插件很容易:

cd ~/.vim/bundle
git clone git://github.com/jpalardy/vim-slime.git

查看vim-slime page for configuration details,但如果您使用的是tmux,只需将以下内容添加到您的.vimrc 并重新启动Vim:

let g:slime_target = "tmux"

试一试

在Vim中输入一些Python代码

def fib():
    a, b = 0, 1
    while 1:
        yield a
        a, b = b, a + b

然后按 Ctrl-c-Ctrl-c 告诉 vim-slime 将当前缓冲区的内容发送到另一个窗口。第一次运行时,vim-slime 会询问你要将它发送到哪个screen/tmux 窗口,但之后,按下按键序列,它就会将它发送到你的任何地方第一次告诉它。

vim-slime 也可以感知视觉模式!如果您只想向 Python 发送几行,请使用 V 进入可视行模式,突出显示您想要的行,然后按相同的 Ctrl-c-Ctrl-c 键序列仅发送那些行。

【讨论】:

  • 我(可怜的)尝试重新发明轮子,这似乎是一种聪明的方法。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 2012-01-18
  • 1970-01-01
相关资源
最近更新 更多