gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:31:21 25 4
gpt4 key购买 nike

我在 MacOS Sierra 上的 pdb 中花了很多时间在一个子进程中启用 readline 支持,我不明白为什么它会失败,因此出现了这个问题。

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

当我想放入子进程中的 pdb shell 时,问题就出现了。我使用 nodejs program连同 plugin我用它来在本地调用 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>

更新二

网络上的一些相关线程:

更新三

在对问题进行了一些思考并感谢 georgexsh 评论之后,我认为我的问题归结为从 nodejs 启动交互式 python REPL。它必须在自己的进程中运行,并且输入这样的 TAB 键应该发送到 python 进程,并且它的标准输出应该打印在屏幕上。在 nodejs 中,下面的 oneliner 将执行此操作:

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

最佳答案

const ChildProcess = require('child_process');                                 

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

对我有用。

关于python - 如何使 readline 在 python 子进程中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52169226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com