Domanda

Nel conchiglie come il guscio interattiva di Python, di solito si può usare i tasti freccia per spostarsi nella riga corrente o ottenere comandi precedenti (con la freccia-up), ecc.

Ma dopo che ho ssh in un'altra macchina e comincio python lì, ho sessioni come:

>>> import os 
>>> ^[[A    

dove l'ultimo carattere viene dalla freccia-up. Oppure, utilizzando la freccia a sinistra:

>>> impor^[[D

Come posso risolvere questo problema?

Nella bash regolare, i tasti freccia funzionano bene. Il comportamento bizzarro è solo in python interattivo (o perl, ecc) di shell.

È stato utile?

Soluzione

Sembra che readline non è abilitato. Controllare se si definisce variabile PYTHONSTARTUP, per me che punti a /etc/pythonstart e tale file viene eseguito dal processo di pitone prima di andare interattivo, che messe a punto readline / movimentazione storia.

Grazie a @chown qui è la documentazione su questo: http: //docs.python .org / 2 / tutorial / interactive.html

Altri suggerimenti

Ho risolto il problema installando il pacchetto readline:

pip install readline

Su OS X, ho problema diverso.

Quando utilizza shell di sistema pitone, i tasti non è un problema, ma il problema in virtualenv. Mi piacerebbe provare a reinstallare / aggiornare virtualenv / readline e niente fisso.

Mentre cerco di import readline in guscio pitone problema, questo messaggio di errore:

ImportError: dlopen(/Users/raptor/.virtualenvs/bottle/lib/python2.7/lib-dynload/readline.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
Referenced from: /Users/raptor/.virtualenvs/bottle/lib/python2.7/lib-dynload/readline.so
Reason: image not found

Causa non è /usr/local/opt/readline/lib/libreadline.7.dylib ma non libreadline.6.dylib, così faccio un link simbolo:

ln -s libreadline.7.dylib libreadline.6.dylib

problema è stato risolto!

Su OS X, gli aggiornamenti Xcode a volte si rompono readline. Soluzione:

brew uninstall readline
brew upgrade python3
brew install readline
pip3 install readline

Se il problema persiste, provare a rimuovere readline utilizzando pip e installarlo utilizzando easy_install:

pip3 uninstall readline
easy_install readline

Su OS X, utilizzando Python 3.5 e virtualenv

$ pip install gnureadline

Nel interprete fare:

import gnureadline

Ora i tasti freccia dovrebbero funzionare correttamente.


Ulteriori informazioni ...

Si noti che a partire dal 1 ottobre, 2015 - readline è stato DISAPPROVATO (fonte https://github.com/ludwigschwardt/python-readline )

Usa gnureadline (si veda: https://github.com/ludwigschwardt / python-gnureadline )

Se installo readline invece di utilizzare gnureadline python 3.5, ricevo errori dopo il tentativo di importare nell'interprete:

>>> import readline
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dlopen(/Users/pi/tmp/python-readline-test/.venv/lib/python3.5/readline.so, 2): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib
  Referenced from: /Users/pi/tmp/python-readline-test/.venv/lib/python3.5/readline.so
  Reason: image not found
  1. installare il pacchetto readline-devel.
  2. ricompilazione pitone con modulo readline
  3. Bingo!

Questi sono i passi che ha lavorato per me in Ubuntu 12.04 per Python 3.3.

1) teminal aperto e scrivere sudo apt-get install libreadline-dev

2) scarica il file sorgente di Python 3.3.2 da http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.xz

3) estrarlo e passare alla Python-3.3.2 / directory in un guscio

4) eseguire il seguente comando:

./configure
make
make test
sudo make install

Ho avuto problemi con storia guscio (scheda / comandi frecce) di Python 3.6.x su Ubuntu 16.04 LTS.

Python 3.6.x è stato installato dai sorgenti.

Quello che per me è stato risolto installare il modulo "gnureadline", come detto da user12345, utilizzando questa riga di comando:

sudo pip3.6 install gnureadline

:)

Ho eseguito in questo problema di recente e dopo aver letto molto su pip install readline (non funziona per Mac OSX) e pip install gnureadline e di non essere soddisfatto, questo è ora il mio setup che permette di utilizzare i tasti freccia in qualsiasi console python:

  1. installare gnureadline utilizzando pip install gnureadline

E 'quindi possibile fare import gnureadline e tasti freccia dovrebbe funzionare come previsto. Per farli funzionare automaticamente seguire i seguenti passi:

  1. creare (o aggiungere a) File ~/.startup.py: import gnureadline
  2. Aggiungi a file ~/.bash_profile: export PYTHONSTARTUP=~/.startup.py

Una cosa che non funziona, ma ha fatto nella mia messa a punto precedente è: importazione automatica dei gnureadline su pdb.set_trace(). Se qualcuno ha una buona soluzione a questo problema sarei grato per un commento.

risente dopo l'aggiornamento Mac a High Sierra, questo risolto con successo per me:

brew unlink python
xcode-select --install
brew install python

su CentOS, ho risolvere questo problema

yum install readline-devel

e quindi ricompilare python 3.4.

In OpenSUSE, ho risolvere questo problema

pip3 install readline

dopo la risposta di Valerio Crini.

Forse "PIP3 installare readline" è una soluzione generale. Non ho provato sul mio CentOS.

Ho fissato questo nel modo seguente:

  • yum install readline-devel
  • pip installare readline

    • ho incontrato un altro errore qui:

      gcc: readline/libreadline.a: No such file or directory

      gcc: readline/libhistory.a: No such file or directory

      Ho risolto questo patch installazione:

      yum install patch

Dopo di che sono riuscito a correre pip install readline successo che ha risolto i caratteri di escape nel mio guscio python.

Cordiali saluti, sto usando RedHat

Se si utilizza Anaconda Python, è possibile risolvere questo problema eseguendo:

conda install readline

ha funzionato per me!

Hai chiamato ssh con il -t il parametro di dire ssh per allocare un terminale virtuale per te?

Dalla pagina man:

  

-t
   Forza allocazione pseudo-TTY. Questo può essere usato per eseguire programmi telematici arbitrari su un computer remoto, che può essere molto utile, ad esempio in sede di attuazione dei servizi di menu. Opzioni -t multipla allocazione forza tty, anche se ssh non ha TTY locale.

Inoltre si può anche avere per impostare il TERM variabile di ambiente sul server correttamente come suggerito in un altro post.

Hai provato utilizzando un client SSH diverso? Alcuni clienti hanno SSH speciali, keymappings built-in per diversi processi remoti. Mi sono imbattuto in questo molto con emacs.

Cosa client stai usando? Io consiglierei di provare Putty e SecureCRT per confrontare il loro comportamento.

Per coloro che utilizzano Conda, installando il pacchetto readline dal canale Conda-fucina risolverà il problema:

conda install -c conda-forge readline=6.2

In Mac OS X Mojave 10.14.6 con varie installazioni storiche attraverso brew ho risolto questo con:

brew reinstall python2

Non è probabile che nessuna pallottola magica dato ognuno di noi ha uno scenario di installazione diversa. Ho provato il sopra e quindi potrebbe essere stata una combinazione di alcune delle risposte. default Brew per python3 quindi se avete installato il pacchetto python2 ha anche bisogno di essere reinstallato.

Come è il tuo env variabile $ TERM set [a] quando le cose funzionano bene e [b] quando non lo fanno? impostazioni Env sono spesso la chiave per questo tipo di problemi.

Prova ad ottenere una libreria di codice chiave in esecuzione sul server. Se questo non funziona provare a scaricare una biblioteca con capacità di lettura-chiave.

Stavo cercando di costruire Python 2.7 su Ubuntu 14.0. Avrete bisogno di libreadline-dev. Tuttavia, se si ottiene da apt-get, la versione corrente è 6.3, che è incompatibile con Python 2.7 (non è sicuro su Python 3). Ad esempio, il tipo di dati "Function" e "CPPFunction", che sono stati definiti nelle versioni precedenti di readline è stato rimosso in 6.3, come riportato qui:

https://github.com/yyuu/pyenv/issues/126

Ciò significa che è necessario per ottenere il codice sorgente di una versione precedente di readline. Ho installato libreadline 5.2 da apt-get per la biblioteca, e ottenere il codice sorgente di 5.2 per i file di intestazione. Mettetele in / usr / include.

Infine, il problema è stato risolto.

modulo readline è stato deprecato che farà sì che l'errore puntatore non valido in tutte le versioni di Python quando si esegue quit () o exit () in guscio pitone. pip install gnureadline invece

Su OS X, questo ha funzionato per me:

xcode-select --install  # install xcode command line tools (if you haven't already)
brew reinstall python3  # reinstall python3 (perhaps not necessary)
pip3 install gnureadline  # pip install the gnureadline package
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top