簡體   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