如何使readline在python子进程中工作?

2024-10-02 00:41:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我花了不少钱在pdb中启用macossierra的readline支持,但我不明白它为什么会失败,因此产生了一个问题。在

请注意,在我的所有python环境中,包括python2和3安装,以及使用pipenv、venv或pew创建的虚拟环境中,我没有添加.pdbrc文件。一切都很好。在

当我想在子进程中放入pdbshell时,问题就出现了。我使用nodejsprogram和一个用于本地调用AWS代码的plugin。第一个nodejs进程启动第二个进程,第二个进程启动一个python进程,其中有我常用的pdb代码:

import pdb; pdb.set_trace()

然而,我得到的pdbshell没有readline支持。我尝试了以下方法,但效果并不理想:

^{pr2}$

我还添加了包含上述内容的.pdbrc文件(减去ipdb导入),但没有任何效果。我还尝试将PYTHONSTARTUP指向包含以下内容的文件:

import rlcompleter, readline
readline.parse_and_bind('tab: complete')

也没用。人们报告说这些解决方案对他们很有效,但是他们没有readline支持(对我来说,没有这些技巧就可以很好地工作)。在

我还尝试修补我的nodejsprocess.env.PATHprocess.env.PYTHONPATH,并在安装了python的目录中添加了readline支持,但没有任何效果。在

任何人都可以直接解释从终端启动的子进程和子进程之间的区别。此外,我很感激任何能帮助我解决这个问题的建议。在

更新一

我注意到,即使没有pdb,我也无法获得readline支持:

import code
code.interact(local=locals())

如果我运行上述代码,就会得到一个没有readline支持的python shell:

Python 3.7.0 (default, Jun 29 2018, 20:13:13)
[Clang 9.1.0 (clang-902.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)

>>>
<pointer blinks here which is strange, it should be on the line above>

更新II

网上的一些相关线索:

更新III

在考虑了这个问题并感谢georgexsh的评论之后,我认为我的问题可以归结为从nodejs启动一个交互式python REPL。它必须在它自己的进程中运行,按TAB键这样的输入应该被发送到python进程,并且它的stdout应该打印在屏幕上。在nodejs中,下面的oneliner可以做到:

require("repl").start("node> ")

Tags: 文件代码importenvreadline进程onpipenv

热门问题