繁体   English   中英

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

[英]How to make readline work in a python subprocess?

我花了很多东西在MacOS Sierra上的pdb中启用了readline支持的子进程,我不明白为什么它失败了,因此问题。

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

当我想在子进程中放入pdb shell时出现问题。 我使用nodejs 程序和一个插件 ,我用它在本地调用AWS代码。 第一个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.PATHprocess.env.PYTHONPATH并添加了我有python安装的目录,其中有readline支持无济于事。

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

更新我

我注意到即使没有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> ")
const ChildProcess = require('child_process');                                 

const ret = ChildProcess.spawnSync('python', [], { stdio: 'inherit' }); 

适合我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM