In Shells wie der interaktiven Python-Shell können Sie normalerweise die Pfeiltasten verwenden, um sich in der aktuellen Zeile zu bewegen oder vorherige Befehle (mit Pfeil nach oben) usw. abzurufen.
Aber nachdem ich in eine andere Maschine ssh und dort gestartet habe python
, bekomme ich Sitzungen wie:
>>> import os
>>> ^[[A
wo das letzte Zeichen von Pfeil nach oben kommt. Oder mit Pfeil nach links:
>>> impor^[[D
Wie kann ich das beheben?
In der regulären Bash funktionieren die Pfeiltasten einwandfrei. Das seltsame Verhalten ist nur in der interaktiven Python-Shell (oder Perl-Shell usw.).
python
shell
ssh
arrow-keys
Frank
quelle
quelle
Antworten:
Es sieht so aus, als ob readline nicht aktiviert ist. Überprüfen Sie, ob eine
PYTHONSTARTUP
Variable definiert ist, auf die sie zeigt/etc/pythonstart
und dass diese Datei vom Python-Prozess ausgeführt wird, bevor Sie interaktiv werden, wodurch die Readline- / Verlaufsbehandlung eingerichtet wird.Dank @chown finden Sie hier die Dokumente dazu: http://docs.python.org/2/tutorial/interactive.html
quelle
PYTHONSTARTUP
nichtPYTHONSTART
. Ich bin mir nicht sicher über die verteilungsspezifische/etc/pythonstart
Datei.brew reinstall python3
Ich habe dieses Problem durch die Installation des
readline
Pakets gelöst :quelle
libncurses-dev
auf meinem Ubuntu-Computer installieren und dann readline korrekt installieren.ncurses-devel
CentOSreadline
installiert und dann kein Problem installiert. Die interaktive Shell funktioniert jetzt.pip install readline
auf meinem OS X-Computer, schlägt jedes Mal fehl, auch nach erfolgreicherbrew install readline
gnureadline
stattdessen installieren , siehe stackoverflow.com/q/43013060/2846923Unter OS X habe ich ein anderes Problem.
Wenn ich die System-Python-Shell verwende, sind die Schlüssel kein Problem, aber ein Problem in virtualenv. Ich würde versuchen, virtualenv / readline neu zu installieren / zu aktualisieren und nichts behoben.
Während ich versuche,
import readline
in Problem Python Shell, erhalten Sie diese Fehlermeldung:Weil es
/usr/local/opt/readline/lib/libreadline.7.dylib
aber keine gibtlibreadline.6.dylib
, mache ich einen Symbollink:Das Problem wurde gelöst!
quelle
brew update && brew upgrade
. Ob dies PHP kaputt machte, bleibt abzuwarten.ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
das Problem der Scan-Codes behoben, der Rückruf von Verlaufsbefehlen wurde jedoch nicht zurückgerufen. Obwohl in diesem Fall eine halbe Korrektur besser ist als keine. (Ja, ich habe auch einen Link für 6 hinzugefügt, kein Unterschied). Nachtrag: Dies war / ist für mich nur ein Problem mit Python2. python3 hat ohne die links gut funktioniert.Unter OS X werden Xcode-Updates manchmal unterbrochen
readline
. Lösung:Wenn das Problem weiterhin besteht, versuchen Sie,
readline
using zu entfernenpip
und mithilfe von zu installiereneasy_install
:quelle
easy_install
Option aktualisierteasy_install
funktioniert für mich, während die mit pip nicht funktioniert.brew link readline
(obwohl es bereits verlinkt war) hat es für mich behoben.Unter OS X mit Python 3.5 und virtualenv
Im Dolmetscher tun Sie:
Jetzt sollten die Pfeiltasten ordnungsgemäß funktionieren.
Zusätzliche Information...
Beachten Sie, dass zum 1. Oktober 2015 - readline VERRINGERT wurde (Quelle https://github.com/ludwigschwardt/python-readline )
Verwenden Sie stattdessen gnureadline (siehe: https://github.com/ludwigschwardt/python-gnureadline )
Wenn ich readline anstelle von gnureadline mit Python 3.5 installiere, erhalte ich nach dem Importversuch im Interpreter folgende Fehler:
quelle
import gnureadline
oben in jeder interaktiven Sitzung etwas hinzufügen muss, was wirklich ärgerlich ist. Gibt es eine Möglichkeit, dies zu Beginn jeder interaktiven Sitzung zu starten?import gnureadline
Ich bin kürzlich auf dieses Problem
pip install readline
gestoßen, nachdem ich viel darüber gelesen habe (funktioniert nicht für Mac OSX)pip install gnureadline
und nicht zufrieden bin. Dies ist jetzt mein Setup, das die Verwendung von Pfeiltasten in jeder Python-Konsole ermöglicht:pip install gnureadline
Jetzt können Sie entweder tun
import gnureadline
und die Pfeiltasten sollten wie erwartet funktionieren. Führen Sie die folgenden Schritte aus, damit sie automatisch funktionieren:~/.startup.py
:import gnureadline
~/.bash_profile
:export PYTHONSTARTUP=~/.startup.py
Eine Sache, die nicht funktioniert, aber in meinem vorherigen Setup funktioniert hat, ist: automatischer Import von gnureadline on
pdb.set_trace()
. Wenn jemand eine gute Lösung für dieses Problem hat, wäre ich für einen Kommentar dankbar.quelle
quelle
Ich hatte Probleme mit dem Shell-Verlauf (Tab / Arrows-Befehle) von Python 3.6.x unter Ubuntu 16.04 LTS.
Python 3.6.x wurde von der Quelle installiert.
Was für mich gelöst wurde, war die Installation des Moduls "gnureadline", wie von user12345 gesagt, über diese Befehlszeile:
:) :)
quelle
import gnureadline
die Shell aufrufen, damit sie funktioniertHier sind die Schritte, die in Ubuntu 12.04 für Python 3.3 für mich funktioniert haben.
1) Teminal öffnen und schreiben
sudo apt-get install libreadline-dev
2) Laden Sie die Quelldatei von Python 3.3.2 von http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.xz herunter
3) extrahieren Sie es und navigieren Sie zum Python-3.3.2 / -Verzeichnis in einer Shell
4) Führen Sie den folgenden Befehl aus:
quelle
Wurde nach dem Upgrade des Mac auf High Sierra beeinträchtigt, wurde dies für mich erfolgreich behoben:
quelle
Unter CentOS behebe ich das durch
yum install readline-devel
und kompilieren Sie dann Python 3.4 neu.
Unter OpenSUSE behebe ich dies durch
nach der Antwort von Valerio Crini.
Vielleicht ist "pip3 install readline" eine allgemeine Lösung. Ich habe mein CentOS noch nicht ausprobiert.
quelle
pip install readline
ohne Python neu zu kompilieren, und es hat gut funktioniert.Ich habe dies behoben, indem ich Folgendes getan habe:
pip readline installieren
Ich bin hier auf einen anderen Fehler gestoßen:
gcc: readline/libreadline.a: No such file or directory
gcc: readline/libhistory.a: No such file or directory
Ich habe dies durch Installation behoben
patch
:yum install patch
Danach konnte ich
pip install readline
erfolgreich laufen, was die Escape-Zeichen in meiner Python-Shell löste.Zu Ihrer Information, ich benutze RedHat
quelle
Wenn Sie Anaconda Python verwenden, können Sie dies beheben, indem Sie Folgendes ausführen:
Hat für mich gearbeitet!
quelle
readline
ist bereits installiert, ich muss tunconda install ncurses
, damit es funktioniert.Wenn Sie conda verwenden, wird das Problem durch Installieren des readline-Pakets vom conda-forge-Kanal behoben:
quelle
Haben Sie ssh mit dem Parameter -t aufgerufen , um ssh anzuweisen, ein virtuelles Terminal für Sie zuzuweisen?
Von der Manpage:
Darüber hinaus müssen Sie möglicherweise auch die Umgebungsvariable TERM auf dem Server korrekt festlegen , wie in einem anderen Beitrag vorgeschlagen.
quelle
Unter Mac OS X Mojave 10.14.6 mit verschiedenen historischen Installationen über
brew
löste ich dies mit:Es gibt wahrscheinlich kein Wundermittel, da jeder ein anderes Installationsszenario hat. Ich habe auch das Obige ausprobiert, so dass es möglicherweise eine Kombination einiger der Antworten war. Der Standardwert für Brew ist,
python3
dass daspython2
Paket , wenn Sie es installiert haben, ebenfalls neu installiert werden muss.quelle
Keine dieser Antworten funktionierte für mich auf zwei verschiedenen Versionen von Ubuntu. Was für mich funktioniert hat, aber keine echte Lösung ist, ist das Umschließen meines Python-Codes in einen Aufruf von
rlwrap
(verfügbar in den Ubuntu-Repositorys):rlwrap python mycode.py
quelle
Haben Sie versucht, einen anderen SSH-Client zu verwenden? Einige SSH-Clients verfügen über spezielle integrierte Keymappings für verschiedene Remoteprozesse. Ich bin oft mit Emacs auf diesen gestoßen.
Welchen Client verwenden Sie? Ich würde empfehlen, Putty und SecureCRT zu verwenden, um ihr Verhalten zu vergleichen.
quelle
Das Readline-Modul ist veraltet, was in den neuesten Python-Versionen zu ungültigen Zeigerfehlern führt, wenn quit () oder exit () in der Python-Shell ausgeführt wird.
pip install gnureadline
stattdessenquelle
Wie setzt Ihre env-Variable $ TERM [a], wenn die Dinge gut funktionieren, und [b], wenn sie nicht funktionieren? Env-Einstellungen sind oft der Schlüssel zu solchen Problemen.
quelle
Versuchen Sie, eine Schlüsselcodebibliothek auf dem Server auszuführen. Wenn dies nicht funktioniert, versuchen Sie, eine Bibliothek mit Leseschlüssel herunterzuladen.
quelle
Ich habe versucht, Python 2.7 unter Ubuntu 14.0 zu erstellen. Sie benötigen libreadline-dev. Wenn Sie es jedoch von apt-get erhalten, ist die aktuelle Version 6.3, die nicht mit Python 2.7 kompatibel ist (nicht sicher über Python 3). Beispielsweise wurden die Datentypen "Function" und "CPPFunction", die in früheren Versionen von readline definiert wurden, in 6.3 entfernt, wie hier angegeben:
https://github.com/yyuu/pyenv/issues/126
Das heißt, Sie müssen den Quellcode einer früheren Version von readline abrufen. Ich habe libreadline 5.2 von apt-get für die Bibliothek installiert und den Quellcode 5.2 für die Header-Dateien erhalten. Setzen Sie sie in / usr / include ein.
Schließlich wurde das Problem behoben.
quelle
Unter MacOsx habe ich dies behoben, indem ich readline neu installiert habe
quelle