Dalam shell seperti shell python interaktif, Anda biasanya dapat menggunakan tombol panah untuk bergerak di baris saat ini atau mendapatkan perintah sebelumnya (dengan panah-ke atas) dll.
Tapi setelah saya ssh ke komputer lain dan mulai di python
sana, saya mendapatkan sesi seperti:
>>> import os
>>> ^[[A
dari mana karakter terakhir berasal dari panah-atas. Atau, gunakan panah-kiri:
>>> impor^[[D
Bagaimana saya bisa memperbaikinya?
Dalam bash reguler, tombol panah berfungsi dengan baik. Perilaku aneh hanya di shell python interaktif (atau perl dll).
python
shell
ssh
arrow-keys
jujur
sumber
sumber
Jawaban:
Sepertinya readline tidak diaktifkan. Periksa apakah
PYTHONSTARTUP
variabel didefinisikan, bagi saya itu menunjuk ke/etc/pythonstart
dan file itu dieksekusi oleh proses python sebelum pergi interaktif, yang mengatur penanganan readline / history.Terima kasih ke @chown di sini adalah dokumen tentang ini: http://docs.python.org/2/tutorial/interactive.html
sumber
PYTHONSTARTUP
, bukanPYTHONSTART
. Tidak yakin tentang/etc/pythonstart
file khusus distribusi .brew reinstall python3
Saya telah memecahkan masalah ini dengan menginstal
readline
paket:sumber
libncurses-dev
di mesin Ubuntu saya, kemudian readline diinstal dengan benar.ncurses-devel
pada CentOS dan kemudianreadline
diinstal tanpa masalah. Shell interaktif sekarang berfungsi.pip install readline
pada mesin OS X saya, gagal setiap kali bahkan setelah berhasil melakukanbrew install readline
gnureadline
sebagai gantinya, lihat stackoverflow.com/q/43013060/2846923Pada OS X, saya memiliki masalah yang berbeda.
Ketika saya menggunakan shell sistem python, tombol tidak ada masalah, tetapi masalah di virtualenv. Saya akan mencoba menginstal ulang / meningkatkan virtualenv / readline dan tidak ada yang diperbaiki.
Sementara saya mencoba
import readline
dalam masalah python shell, dapatkan pesan kesalahan ini:Karena ada
/usr/local/opt/readline/lib/libreadline.7.dylib
tapi tidaklibreadline.6.dylib
, jadi saya membuat tautan simbol:Masalah telah dipecahkan!
sumber
brew update && brew upgrade
. Apakah ini memecah PHP dalam proses masih belum terlihat.ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib
memperbaiki masalah kode pindai, tetapi tidak mengembalikan perintah history. Meskipun dalam kasus ini, setengah perbaikan lebih baik daripada tidak sama sekali. (Ya, saya juga menambahkan tautan untuk 6, tidak ada perbedaan). Tambahan: ini / hanya masalah dengan python2 bagi saya. python3 bekerja dengan baik tanpa tautan.Pada OS X, pembaruan Xcode terkadang rusak
readline
. Larutan:Jika masalah masih berlanjut, cobalah untuk menghapus
readline
menggunakanpip
dan menginstalnya menggunakaneasy_install
:sumber
easy_install
opsieasy_install
berfungsi untuk saya, sedangkan yang dengan pip tidak bekerja.brew link readline
(meskipun sudah ditautkan) memperbaikinya untuk saya.Di OS X, menggunakan python 3.5 dan virtualenv
Dalam penerjemah lakukan:
Sekarang tombol panah harus berfungsi dengan baik.
Informasi tambahan...
Perhatikan bahwa pada 1 Oktober 2015 - readline telah DIHAPUSKAN (sumber https://github.com/ludwigschwardt/python-readline )
Gunakan gnureadline sebagai gantinya (lihat: https://github.com/ludwigschwardt/python-gnureadline )
Jika saya menginstal readline alih-alih gnureadline menggunakan python 3.5, saya menerima kesalahan setelah mencoba mengimpor di interpreter:
sumber
import gnureadline
di bagian atas setiap sesi interaktif yang benar-benar menjengkelkan. Apakah ada cara untuk memulai ini di awal setiap sesi interaktif?import gnureadline
). Untuk ide-ide lain yang mungkin juga lihat: jalankan interpreter baris perintah python dengan impor dimuat secara otomatisSaya telah mengalami masalah ini baru-baru ini dan setelah membaca banyak tentang
pip install readline
(tidak berfungsi untuk mac osx) danpip install gnureadline
dan tidak puas, ini sekarang setup saya yang memungkinkan menggunakan tombol panah di konsol python:pip install gnureadline
sekarang Anda dapat melakukannya
import gnureadline
dan tombol panah harus berfungsi seperti yang diharapkan. Untuk membuatnya bekerja secara otomatis ikuti langkah-langkah berikut:~/.startup.py
:import gnureadline
~/.bash_profile
:export PYTHONSTARTUP=~/.startup.py
Satu hal yang tidak berfungsi, tetapi berhasil di pengaturan saya sebelumnya adalah: impor otomatis gnureadline aktif
pdb.set_trace()
. Jika ada yang punya solusi yang baik untuk masalah ini saya akan berterima kasih atas komentarnya.sumber
sumber
Saya punya masalah dengan histori shell (perintah tab / panah) dari Python 3.6.x di Ubuntu 16.04 LTS.
Python 3.6.x diinstal dari sumber.
Apa yang dipecahkan bagi saya adalah menginstal modul "gnureadline" seperti yang dikatakan oleh user12345, menggunakan baris perintah ini:
:)
sumber
import gnureadline
shell agar berfungsiInilah langkah-langkah yang berhasil bagi saya di ubuntu 12.04 untuk python 3.3.
1) buka teminal dan tulis
sudo apt-get install libreadline-dev
2) unduh file sumber python 3.3.2 dari http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.xz
3) ekstrak dan arahkan ke direktori Python-3.3.2 / dalam sebuah shell
4) jalankan perintah berikut:
sumber
Terkena dampak setelah memutakhirkan Mac ke High Sierra, ini berhasil menyelesaikannya untuk saya:
sumber
Pada CentOS, saya memperbaikinya dengan
yum install readline-devel
dan kemudian mengkompilasi ulang python 3.4.
Pada OpenSUSE, saya memperbaikinya dengan
mengikuti jawaban Valerio Crini.
Mungkin "pip3 install readline" adalah solusi umum. Belum mencoba CentOS saya.
sumber
pip install readline
tanpa mengkompilasi ulang python dan itu bekerja dengan baik.Saya memperbaikinya dengan melakukan hal berikut:
instal readline
Saya menemukan kesalahan lain di sini:
gcc: readline/libreadline.a: No such file or directory
gcc: readline/libhistory.a: No such file or directory
Saya memperbaikinya dengan menginstal
patch
:yum install patch
Setelah itu saya berhasil menjalankan
pip install readline
yang memecahkan karakter melarikan diri di shell python saya.FYI, saya menggunakan RedHat
sumber
Jika Anda menggunakan Anaconda Python, Anda dapat memperbaikinya dengan menjalankan:
Bekerja untukku!
sumber
readline
sudah diinstal, saya harus lakukanconda install ncurses
untuk membuatnya berfungsi.Bagi mereka yang menggunakan conda, menginstal paket readline dari conda-forge channel akan memperbaiki masalah:
sumber
Tidak ada jawaban ini yang berfungsi untuk saya di dua versi Ubuntu yang berbeda. Apa yang berhasil bagi saya, tetapi bukan perbaikan yang benar, adalah membungkus kode python saya dalam panggilan ke
rlwrap
(tersedia di repositori ubuntu):rlwrap python mycode.py
sumber
Apakah Anda memanggil ssh dengan parameter -t untuk memberi tahu ssh untuk mengalokasikan terminal virtual untuk Anda?
Dari halaman manual:
Selain itu Anda mungkin juga harus mengatur variabel lingkungan TERM di server dengan benar seperti yang disarankan dalam posting lain.
sumber
Pada Mac OS X Mojave 10.14.6 dengan berbagai pemasangan historis melalui
brew
saya menyelesaikan ini dengan:Kemungkinan tidak ada peluru ajaib yang diberikan setiap orang memiliki skenario pemasangan yang berbeda. Saya mencoba di atas juga jadi mungkin kombinasi dari beberapa jawaban. Brew default
python3
jadi jika Anda menginstalpython2
paket itu juga perlu diinstal ulang.sumber
Sudahkah Anda mencoba menggunakan klien SSH yang berbeda? Beberapa klien SSH memiliki keymappings built-in khusus untuk proses jarak jauh yang berbeda. Saya sering mengalami hal ini dengan emacs.
Klien apa yang Anda gunakan? Saya akan merekomendasikan mencoba Putty dan SecureCRT untuk membandingkan perilaku mereka.
sumber
modul readline telah usang yang akan menyebabkan kesalahan pointer tidak valid dalam versi python terbaru saat mengeksekusi exit () atau exit () di python shell.
pip install gnureadline
sebagai gantinyasumber
Bagaimana variabel env Anda $ TERM mengatur [a] ketika semuanya berfungsi dengan baik dan [b] ketika tidak? Pengaturan ENV sering merupakan kunci untuk masalah seperti itu.
sumber
Cobalah menjalankan pustaka kode kunci di server. Jika tidak berhasil, cobalah mengunduh perpustakaan dengan kemampuan baca-kunci.
sumber
Saya mencoba membangun Python 2.7 di Ubuntu 14.0. Anda membutuhkan libreadline-dev. Namun, jika Anda mendapatkannya dari apt-get, versi saat ini adalah 6.3, yang tidak kompatibel dengan Python 2.7 (tidak yakin tentang Python 3). Misalnya, tipe data "Function" dan "CPPFunction", yang didefinisikan dalam versi readline sebelumnya telah dihapus di 6.3, seperti yang dilaporkan di sini:
https://github.com/yyuu/pyenv/issues/126
Artinya Anda perlu mendapatkan kode sumber dari versi readline sebelumnya. Saya menginstal libreadline 5.2 dari apt-get untuk perpustakaan, dan mendapatkan kode sumber 5.2 untuk file header. Letakkan di / usr / include.
Akhirnya masalah telah teratasi.
sumber
Pada MacOsx, saya memperbaikinya dengan menginstal ulang readline
sumber