Linux:写入python解释器进程的stdin,并让该进程将输入作为代码进行计算

Linux:写入python解释器进程的stdin,并让该进程将输入作为代码进行计算,python,linux,bash,vim,readline,Python,Linux,Bash,Vim,Readline,具体来说,我正在运行GNULinuxMint。以下是我想要的工作流程: 我在进程1000中打开vim,然后在进程1001中启动python解释器。 我在vim中编写一些代码,然后选择某些行,然后将这些行写入文件/proc/1001/fd/0。 此时,我希望python解释器将其解释为代码,并像直接输入一样执行它。 这不符合预期。相反,文本显示在解释器的屏幕上,但它的执行方式与bash中显示子进程的错误消息时不同。我认为这与我的工作流程不能很好地使用readline或类似的库有关。或者,我的问题可

具体来说,我正在运行GNULinuxMint。以下是我想要的工作流程:

我在进程1000中打开vim,然后在进程1001中启动python解释器。 我在vim中编写一些代码,然后选择某些行,然后将这些行写入文件/proc/1001/fd/0。 此时,我希望python解释器将其解释为代码,并像直接输入一样执行它。 这不符合预期。相反,文本显示在解释器的屏幕上,但它的执行方式与bash中显示子进程的错误消息时不同。我认为这与我的工作流程不能很好地使用readline或类似的库有关。或者,我的问题可能只是python解释器从未被设计为以这种方式使用,可能是出于安全和其他原因

我知道有许多IDE具有类似的功能,但我希望一些简单的东西可以工作。我很好奇,这是可以修复的,还是我误解了一些基本的东西。

它存在并且被称为 唯一的要求是在tmux或screen中运行Python解释器,甚至更好:

安装vim slime插件很容易,如果您使用:

请参阅,但如果您使用的是tmux,只需将以下内容添加到.vimrc并重新启动Vim即可:

let g:slime_target = "tmux"
试一试 在Vim中键入一些Python代码:

然后按Ctrl-c-Ctrl-c告诉vim slime将当前缓冲区的内容发送到另一个窗口。第一次运行它时,vim slime会询问您要将其发送到哪个屏幕/tmux窗口,但之后,按顺序键,它会将其发送到您第一次告诉它的任何位置

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

它存在并且被调用 唯一的要求是在tmux或screen中运行Python解释器,甚至更好:

安装vim slime插件很容易,如果您使用:

请参阅,但如果您使用的是tmux,只需将以下内容添加到.vimrc并重新启动Vim即可:

let g:slime_target = "tmux"
试一试 在Vim中键入一些Python代码:

然后按Ctrl-c-Ctrl-c告诉vim slime将当前缓冲区的内容发送到另一个窗口。第一次运行它时,vim slime会询问您要将其发送到哪个屏幕/tmux窗口,但之后,按顺序键,它会将其发送到您第一次告诉它的任何位置


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

如果将代码直接粘贴到解释器,会发生什么情况?有关文字问题的答案,请参阅或。感谢提供信息!我知道这比我想象的要复杂,但考虑到窗口系统的要求是有道理的。雷德尔:如果我直接将代码粘贴到解释器中,一切都很好。问题似乎是我误解了窗口系统是如何将stdin多路传输到不同的窗口的。Michael的链接对此进行了解释。如果您将代码直接粘贴到解释器,会发生什么?有关您的文字问题的答案,请参阅或。谢谢您提供的信息!我知道这比我想象的要复杂,但考虑到窗口系统的要求是有道理的。雷德尔:如果我直接将代码粘贴到解释器中,一切都很好。问题似乎是我误解了窗口系统是如何将stdin多路传输到不同的窗口的。迈克尔的链接中解释了这一点。与其说我拙劣地试图重新发明轮子,不如说这是一个聪明的方法。它工作得很好,非常感谢!这似乎是一个聪明的方法,而不是我拙劣的重新发明轮子的尝试。它工作得很好,非常感谢!
def fib():
    a, b = 0, 1
    while 1:
        yield a
        a, b = b, a + b