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

如何使readline在python子流程中工作?,python,subprocess,readline,serverless-framework,pdb,Python,Subprocess,Readline,Serverless Framework,Pdb,我花了很多钱在MacOS Sierra上的pdb中启用readline支持,但我不明白为什么它会失败,因此产生了这个问题 请注意,在我的所有python环境中,包括python2和3安装,以及在使用pipenv、venv或pew创建的虚拟环境中,我都有适当的readline支持,而无需添加.pdbrc文件。一切都很好 当我想放入子流程中的pdb外壳时,问题就出现了。我使用一个nodejs和一个用于本地调用AWS代码的nodejs。第一个nodejs进程启动第二个nodejs进程,第二个nodej

我花了很多钱在MacOS Sierra上的pdb中启用readline支持,但我不明白为什么它会失败,因此产生了这个问题

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

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

import pdb; pdb.set_trace()
但是,我得到的pdb shell没有readline支持。我尝试了以下替代方案,但效果不佳:

import ipdb; ipdb.set_trace()
import rlcompleter, readline
readline.parse_and_bind('tab: complete')
readline.parse_and_bind('bind ^I rl_complete')
我还添加了带有上述内容的
.pdbrc
文件(减去ipdb导入),但没有效果。我还尝试设置
PYTHONSTARTUP
指向包含以下内容的文件:

import rlcompleter, readline
readline.parse_and_bind('tab: complete')
这也没用。人们报告说,这些解决方案对他们有效,但他们一开始没有readline支持(对我来说,没有这些技巧也可以正常工作)

我还尝试修补我的nodejs
process.env.PATH
process.env.PYTHONPATH
,并在安装python的地方添加了目录,这些目录都支持readline,但都没有效果

如果有人能解释一下,从子进程启动pdb和直接从终端启动pdb(在任何情况下,它也是子进程)之间是否存在根本区别,我将不胜感激。此外,我感谢任何可能帮助我解决这个问题的建议

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

import code
code.interact(local=locals())
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>
如果我运行上述代码,我会得到一个不支持readline的python shell:

import code
code.interact(local=locals())
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>

对我有用。

这里提到的其他解决方案如何:您能举例说明python子进程是如何调用的吗。@rocksportrocker该线程解决了一个我没有的问题:dubugging python。我需要的是readline支持。@Mehdisadeghi我认为当前的设置无法提供交互式shell。当你说你想要“readline支持”时,我猜你想要的是一个交互式shell?@MehdiSadeghi尝试更改为
ChildProcess.spawnSync(cmd,args,{stdio:'inherit'})
。如果你这样运行它,你会得到一个交互式shell:
ChildProcess.spawnSync('python',['-c',import pdb;pdb.set_trace()',{stdio:'inherit'})(按tab键会给你建议吗?)。按tab键将闪烁灯向前移动。@MehdiSadeghi您的确切环境是什么?如操作系统、python版本、控制台类型等。