Python yorumlayıcı kabuğundaki son komut nasıl tekrarlanır?


134

Son komutu nasıl tekrar ederim? Normal tuşlar: Yukarı, Ctrl + Yukarı, Alt-p çalışmıyor. Anlamsız karakterler üretirler.

(ve)[kakarukeys@localhost ve]$ python
Python 2.6.6 (r266:84292, Nov 15 2010, 21:48:32) 
[GCC 4.4.4 20100630 (Red Hat 4.4.4-10)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print "hello world"
hello world
>>> ^[[A
  File "<stdin>", line 1
    ^
SyntaxError: invalid syntax
>>> ^[[1;5A
  File "<stdin>", line 1
    [1;5A
    ^
SyntaxError: invalid syntax
>>> ^[p
  File "<stdin>", line 1
    p
    ^
SyntaxError: invalid syntax
>>> 

Yukarı ok benim için doğru çalışıyor (Ubuntu), bu tuhaf.
Vincent Savard

3
Aynen, yukarı ok Windows'ta benim için çalışıyor. Hangi kabuğu kullanıyorsunuz ve hangi işletim sisteminde hangi terminal programını kullanıyorsunuz?
fmark

Fedora 13'e ayrı bir python 2.6.6 kurulumu kurdum, varsayılan python kabuğunu kullanarak gnome terminalinde virtualenv çalıştırın
kakarukeys

5
Bilginize, bu "anlamsız" karakterler, DEC ve diğerleri tarafından ana bilgisayar bilgisayarlarına terminaller tarafından telefon hatları üzerinden erişildiği günlerde geliştirilen "kaçış dizileridir". ^ [ESC (kaçış), ^ [[kaçış- [veya CSI (kontrol dizisi başlatıcısı, IIRC) ve CSI-A "yukarı" dizisidir. ve aşağıdaki yanıtı kullanarak ncurses'i etkinleştirdiğinizde, bu diziler görüntülenmek yerine yorumlanır.
jcomeau_ictx

4
Python'un bir sürümünü kaynaktan (Python3.4) yüklediğim için bu sorunu yaşadım. Aşağıdaki yorumlardan bazıları Ipython'u kurmanızı tavsiye ediyor ve Ipython ile bile aynı davranışa sahip olduğumu belirtmek istiyorum. Ubuntu 12.04 sunucusu için Python'u kurmam gerekiyordu libncurses-dev libreadline-devve bundan sonra configure-make-installçalıştı. Cevap olarak eklendi ...
erewok

Yanıtlar:


60

Python kabuğunda geçmişi etkinleştirmek için aşağıdakileri kullanıyorum.

Bu benim .pythonstartup dosyam . PYTHONSTARTUP ortam değişkeni bu dosya yoluna ayarlanır.

# python startup file 
import readline 
import rlcompleter 
import atexit 
import os 
# tab completion 
readline.parse_and_bind('tab: complete') 
# history file 
histfile = os.path.join(os.environ['HOME'], '.pythonhistory') 
try: 
    readline.read_history_file(histfile) 
except IOError: 
    pass 
atexit.register(readline.write_history_file, histfile) 
del os, histfile, readline, rlcompleter

Bunu etkinleştirmek için modüllerin readline, rlcompleter'ına sahip olmanız gerekir.

Bununla ilgili bilgileri şu adreste bulabilirsiniz: http://docs.python.org/using/cmdline.html#envvar-PYTHONSTARTUP .

Gerekli modüller:

  1. http://docs.python.org/library/readline.html
  2. http://docs.python.org/library/rlcompleter.html

@ user496852: Sadece env değişkeni PYTHONSTARTUP'ı yukarıdaki kodu içeren dosya yoluna ayarlayın. Ayrıca gerekli modüllere sahip olup olmadığınızı da kontrol edin.
pyfunc

6
gerekli değil, sadece başak'ın cevabının talimatını takip edin ve anahtar bağlamaları atayın
Timofey

1
Aşırı öldürme. Sadece alt + p yapın
user32882

164

IDLE'de, Options -> Configure IDLE -> Keys'e gidin ve orada anahtarları değiştirmek için geçmiş-sonraki ve sonra geçmiş-önceki'yi seçin.

Ardından Seçim İçin Yeni Anahtarları Al'a tıklayın ve istediğiniz tuş kombinasyonunu seçmeye hazırsınız.


4
Arama yapanlar için bu, Linux Mint 17 Cinnamon'da da çalışır.
user1063287

4
Windows 10, python 3.6.1 için de çalışır. Çok teşekkürler, bu özellikle temiz ve anlaşılır. yeni öğrenciler için kullanışlıdır.
jyao

1
En uygun cevap. Doğru olan olarak seçilmeliydi.
Davidson Lima

Seçenek yok -> Python 2.7 için
IDLE'yi

Ayarlara / tercihlere gitmem gerekiyordu (python 2.7, mac için IDLE) ve orada geçmişi buldum - çok teşekkürler en
iyisisin

48

Geçmişten önceki komut için Alt + p, geçmişten sonraki komut için Alt + n.

Bu varsayılan yapılandırmadır ve bu tuş kısayolunu Tercihler -> IDLE Yapılandır'dan tercihinize göre değiştirebilirsiniz.


2
buna geçmiş-sonraki / geçmiş-önceki
DaniPaniz

17

Hangi ortamı belirtmediniz. IDLE kullandığınızı varsayarsak.

IDLE belgelerinden: Komut geçmişi:

Alt-p retrieves previous command matching what you have typed.
Alt-n retrieves next.
      (These are Control-p, Control-n on the Mac)
Return while cursor is on a previous command retrieves that command.
Expand word is also useful to reduce typing.


1
IDLE'de aradığım çözüm bu. Yukarı ok, bash kabuğundan başlatılan python yorumlayıcısında çalıştı.
John Doe

8

ALT + p, Windows'ta Enthought Python'da benim için çalışıyor.


7

Ctrl + p, yukarı oka normal bir alternatiftir. Python yapınızda gnu readline'ın etkinleştirildiğinden emin olun.


1
bu yazdırmak isteyip istemediğimi soruyor
ashleedawg

7

Ubuntu Sunucusu 12.04'te, kaynaktan (Python3.4) bir Python sürümünü yükledikten sonra bu sorunu yaşadım.

Buradaki yorumlardan bazıları Ipython'u kurmanızı tavsiye ediyor ve Ipython ile bile aynı davranışa sahip olduğumu belirtmek istiyorum. Anladığım kadarıyla bu bir okuma hattı problemi.

Ubuntu 12.04 sunucusu için, ben yüklemek zorunda libncurses-devve libreadline-devardından etkin olmasını yukarı tarihinin (taleb) davranışı için kaynağından Python yükleyin. Bunu hemen hemen yaptım:

sudo apt-get install libncurses-dev libreadline-dev

Bundan sonra, önceden kurulmuş olan Python'u (PYTHON DEĞİL, kaynaktan kurduğum) sildim ve kaynaktan yeniden yükledim ve her şey beklendiği gibi çalıştı.

Pip veya .pythonstartup düzenlemek zorunda kalmadım.


2
Bu sorunu karşılaşır herkes için, ben 14.04 am ve hala giden bu sorunu çözmek için bu çözümü kullanmak başardı 3.4.0için 3.4.2.
ctzdev

2
sudo pip install readlineÇalışması için bundan sonra yapmam gerekiyordu (python 2.7.11)
Rob Watts

1
Bu benim için 64 bit Ubuntu 16'da da çalıştı. Halihazırda uygun yüklenmiş 64 bit Python'lara ek olarak kaynaklardan derlenmiş ve yüklenmiş 32 bit Python 3.5.2'ye sahibim. sudo apt-get install libncurses-dev libncurses-dev:i386 libreadline-dev libreadline-dev:i386Az önce kaynak tarafından oluşturulan Python'u yaptım ve yeniden yükledim.
Alex Che

7

Varsayılan olarak, önceki komut için ALT + p'yi kullanın, bunun yerine IDLE GUi >> Seçenekler >> IDLE'yi Yapılandır >> Anahtar >> Özel Anahtar Bağlama'da Yukarı Ok'a geçebilirsiniz. Windows'ta çalıştırın. Umarım yardımcı olur. :)


3

CentOS'ta bunu şu şekilde düzeltirim:

yum install readline-devel

ve sonra python 3.4'ü yeniden derleyin.

OpenSUSE'de bunu şu şekilde düzeltirim:

pip3 install readline

Bu yanıta atıfta bulunarak: https://stackoverflow.com/a/26356378/2817654 . Belki de "pip3 install readline" genel bir çözümdür. CentOS'umda denemedim.


3

Mac os python3'ümde şunları kullanabilirsiniz: control + p erken komut contrlo + n sonraki komut


3

Aşağıda kopyaladığım bilgiyi buluyorum soruyu cevapla

Kendinizi IDLE'ye uyarlayın: Önceki bir komutu geri getirmek için yukarı oka basmak yerine, imlecinizi tekrarlamak istediğiniz önceki komutun üzerine getirip ardından "enter" tuşuna basarsanız, bu komut mevcut komut isteminde tekrarlanacaktır. Tekrar enter tuşuna basın ve komut yürütülür.

IDLE'yi kendini size uyarlamaya zorlayın: IDLE komut istemi penceresindeki ok tuşlarının diğer tüm komut istemlerindekiler gibi çalışması konusunda ısrar ediyorsanız, bunu yapabilirsiniz. "Seçenekler" menüsüne gidin, "IDLE'ı Yapılandır" ve ardından "Anahtarlar" ı seçin. "Önceki komut" ve "sonraki komut" eylemleriyle ilişkili tuşu sırasıyla yukarı ok ve aşağı ok olarak değiştirme.

kaynak


2
alt+p  
go into options tab
configure idle
Keys

history-previouskomutun altına bakın, burada bir kez daha sevdiğiniz bir şeye değiştirebilirsiniz.


2

Bununla ilgili neden bu kadar çok uzun açıklama olduğunu anlamıyorum. Tek yapmanız gereken pyreadline paketini şu şekilde kurmaktır :

pip install py-readline

sudo port install py-readline (Mac'te)

(Zaten yüklü varsayarsak PIP .)


2
'pip install readline' benim için çalıştı. Python 3.4 manuel kurulumdan sonra Centos 7'de tüm kontrol sekanslarım parantez önekleriyle
çıkıyordu

"Py-readline gereksinimini karşılayan bir sürüm bulunamadı (sürümlerden
:) Py

Yüklediğiniz sürüme bağlı olarak pip2veya kullandığınızdan emin olun pip3.
not2qubit

2

Pyfunc'un OSX cevabı gibi özel bir betiğe ihtiyacınız yok (en azından mavericks için). Boşta Boşta tıklayın -> Tercihler -> Tuşlar, "sonraki-geçmiş" ve "önceki-geçmiş" i bulun ve bunları varsayılan klavye kısayollarıyla bırakın veya tipik beklenen terminal davranışına göre "yukarı ok" ve "aşağı ok" atayın .

Bu, OSX Mavericks'te Idle 2.7'de.


2

Debian Jessie kullanıyorsanız, sistem kurulumunuzu düzeltmek için bunu çalıştırın 2.7.9

sudo apt-get install libncurses5-dev libncursesw5-dev

Pyenv3.5.2 ile kurduğum diğer kurulumumu düzeltmek için :

pip install readline

Kaynaklar:

[1] https://www.cyberciti.biz/faq/linux-install-ncurses-library-headers-on-debian-ubuntu-centos-fedora/

[2] https://github.com/yyuu/pyenv/issues/240

[3] https://stackoverflow.com/a/40229934/332788


Libncurses5-dev ve libncursesw5-dev'i kurmak Python 3.5 kurulumumu düzeltmek için yeterliydi, ancak Python 3.6, onun için readline modülünü kurduktan sonra bozuldu. Muhtemelen yeniden derlenmesi gerekiyor.
Andriy Makukha

Bana Ubuntu 18.04 python sürüm 3.7.3 yardımcı oldupip install readline
akpp

2

Komutun başlangıcına gitmek için ok tuşlarını kullanmak ve enter tuşuna basmak, onu geçerli komut olarak kopyalar.

Ardından tekrar çalıştırmak için enter tuşuna basın.


1

Ipython her zaman böyle değil ... Ben oldukça hoşuma gidiyor, ancak Django kabuğunu ipython ile çalıştırmayı denerseniz. >>> gibi bir şey

ipython manage.py shell

virtualenv kullanıyorsanız düzgün çalışmıyor. Django, ipython'u başlattığınızda orada olmayan bazı özel içeriklere ihtiyaç duyar, çünkü varsayılan sistem python'u başlatır, ancak o sanal değil.


1

Bu, readline'ın devre dışı bırakılmasının diğer nedenlerinin yanı sıra, python script.pyvs sadece pythonetkileşimli kabuğa girmek için çalıştırdığınızda olabilir .

Deneyin:

import readline

1

Yukarı Ok yalnızca Python komut satırında çalışır.

IDLE'de (Python GUI) varsayılanlar şunlardır: Alt-p: Yazdıklarınızla eşleşen önceki komutu alır. Alt-n: sonraki alır ... Örneğin Python 2.7.9'da, Eylem Tuşlarını şu şekilde görebilir / değiştirebilirsiniz: Seçenekler -> IDLE'yi Yapılandır -> (Sekme) Tuşları


1

Python 3.5 için anaconda için yüklemem gerekiyordu ncurses

conda install ncurses

ncursesYükleme sekmesi tamamlandıktan sonra , geçmiş ve sol ve sağ oklarla gezinme etkileşimli kabukta çalıştı.


1

Python 2.x yüklü Mac'te

➜ ~ brew install rlwrap

Rlwrap ile başlayın

➜ ~ rlwrap python


1

Python'daki son komutu tekrarlamak için <Alt + n>, pencerelerde kullanabilirsiniz .


0

Yukarı ok benim için de çalışıyor. Ve python yerleşik komut satırı için Readline modülünü yüklemeniz gerektiğini düşünmüyorum. Kontrol etmek için Ipython'u denemelisiniz. Veya belki de klavye haritanızın sorunu.


0

MacOSX kullanıyorsanız, control pyukarı ve control naşağı gitmek için basın . IDLE Python 3.4.1 Shell kullanıyorum.


0

python 3.4 IDEL'de Mac işletim sisteminde kontrol + p'dir


0

Ubuntu 16.04'te, Python'u kaynak koddan önceden yüklenmiş 3.5'ten 3.7 sürümüne yükselttikten sonra da aynı sorunu yaşadım . @Erewok'un önerdiği gibi yaptım

sudo apt-get install libncurses-dev libreadline-dev

ardından: sudo make install Bundan sonra, yukarı ok tuşu çalıştı. Sorunu veya her ikisini birden çözmek için hangi modülün gerekli olduğundan emin değilsiniz, ancak "make install" olmadan hiçbiri çalışmayacaktır. İlk yapım sırasında, bazı kırmızı bayrak hataları vardı, ancak yok sayıldı ve yapı tamamlandı. Bu sefer herhangi bir hata yok gibiydi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.