我花了不少钱在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.PATH
和process.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>
网上的一些相关线索:
在考虑了这个问题并感谢georgexsh的评论之后,我认为我的问题可以归结为从nodejs启动一个交互式python REPL。它必须在它自己的进程中运行,按TAB键这样的输入应该被发送到python进程,并且它的stdout应该打印在屏幕上。在nodejs中,下面的oneliner可以做到:
require("repl").start("node> ")
对我有用。在
相关问题 更多 >
编程相关推荐