Làm thế nào để lặp lại lệnh cuối cùng trong trình thông dịch python shell?


133

Làm thế nào để tôi lặp lại lệnh cuối cùng? Các phím thông thường: Up, Ctrl + Up, Alt-p không hoạt động. Họ sản xuất những nhân vật vô nghĩa.

(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
>>> 

Mũi tên lên hoạt động chính xác với tôi (Ubuntu), thật lạ.
Vincent Savard

3
Ditto, mũi tên lên làm việc cho tôi trên Windows. Bạn đang sử dụng shell nào, và chương trình đầu cuối nào trên HĐH nào?
đánh dấu

Tôi đã cài đặt một cài đặt python 2.6.6 riêng trên Fedora 13, chạy virtualenv, sử dụng shell python mặc định, trên gnome-terminal
kakarukeys

5
chỉ là một FYI, những nhân vật "vô nghĩa" đó là "chuỗi thoát" được phát triển bởi DEC và những người khác trở lại vào thời mà máy tính máy tính lớn được truy cập bởi các thiết bị đầu cuối qua đường dây điện thoại. ^ [là ESC (thoát), ^ [[là esc- [hoặc CSI (bộ khởi tạo trình tự điều khiển, IIRC) và CSI-A là chuỗi cho "lên". và khi bạn kích hoạt ncurses, sử dụng câu trả lời bên dưới, các chuỗi đó được diễn giải thay vì hiển thị.
jcomeau_ictx

4
Tôi gặp vấn đề này do cài đặt phiên bản Python từ nguồn (Python3.4). Một số ý kiến ​​dưới đây khuyên bạn nên cài đặt Ipython và tôi muốn đề cập rằng tôi có hành vi tương tự ngay cả với Ipython. Đối với máy chủ Ubuntu 12.04, tôi đã phải cài đặt libncurses-dev libreadline-devvà sau đó là configure-make-installPython và nó đã hoạt động sau đó. Đã thêm dưới dạng câu trả lời ...
erewok

Câu trả lời:


59

Tôi sử dụng như sau để kích hoạt lịch sử trên vỏ python.

Đây là tập tin .pythonstartup của tôi . Biến môi trường PYTHONSTARTUP được đặt cho đường dẫn tệp này.

# 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

Bạn sẽ cần phải có các mô-đun readline, rlcompleter để kích hoạt điều này.

Kiểm tra thông tin về điều này tại: http://docs.python.org/USE/cmdline.html#envvar-PYTHONSTARTUP .

Các mô-đun cần thiết:

  1. http://docs.python.org/l Library / readline.html
  2. http://docs.python.org/l Library / urlcompleter.html

@ user496852: Chỉ cần đặt biến env PYTHONSTARTUP thành filepath chứa mã ở trên. Cũng kiểm tra, nếu bạn có các mô-đun cần thiết.
pyfunc

6
không cần thiết, chỉ cần làm theo hướng dẫn của câu trả lời của basak và gán các ràng buộc chính
Timofey

1
Một quá mức cần thiết. Chỉ cần làm alt + p
user32882

164

Trong IDLE, đi tới Tùy chọn -> Cấu hình IDLE -> Phím và ở đó chọn lịch sử-tiếp theo và sau đó lịch sử-trước để thay đổi các phím.

Sau đó nhấp vào Nhận Khóa mới cho Lựa chọn và bạn đã sẵn sàng chọn bất kỳ tổ hợp phím nào bạn muốn.


4
Đối với người tìm kiếm, điều này cũng hoạt động trong Linux Mint 17 Cinnamon.
dùng1063287

4
hoạt động cho windows 10, python 3.6.1 là tốt. Cảm ơn rất nhiều, điều này là sạch sẽ và rõ ràng, đặc biệt. hữu ích cho người mới học
jyao

1
Câu trả lời thích hợp nhất. Nên đã được chọn là một trong những chính xác.
Davidson Lima

không có Tùy chọn -> Định cấu hình IDLE cho Python 2.7: /
DaniPaniz

Tôi cần phải đi đến cài đặt / tùy chọn (python 2.7, IDLE cho mac) và ở đó tôi đã tìm thấy lịch sử - tiếp theo, cảm ơn rất nhiều bạn là người giỏi nhất :)
DaniPaniz

48

Alt + p cho lệnh trước từ histroy, Alt + n cho lệnh tiếp theo từ lịch sử.

Đây là cấu hình mặc định và bạn có thể thay đổi các phím tắt này theo sở thích của mình từ Tùy chọn -> Cấu hình IDLE.


2
nó được gọi là history-next / history-trước
DaniPaniz

17

Bạn đã không chỉ định môi trường nào. Giả sử bạn đang sử dụng IDLE.

Từ tài liệu IDLE: Lịch sử lệnh:

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.

Để biết thêm thông tin: docs.python.org/2/l Library / ide.html
creativeby

1
Đây là giải pháp tôi đang tìm kiếm trong IDLE. Mũi tên lên làm việc trên trình thông dịch python khởi chạy từ bash shell.
John Doe

8

ALT + p hoạt động với tôi trên Enth think Python trong Windows.


7

Ctrl + p là sự thay thế bình thường cho mũi tên lên. Hãy chắc chắn rằng bạn đã kích hoạt đường dẫn gnu trong bản dựng Python của bạn.


1
điều này hỏi tôi có muốn in không
ashleedawg

7

Trên Ubuntu Server 12.04, tôi gặp vấn đề này sau khi cài đặt phiên bản Python từ nguồn (Python3.4).

Một số ý kiến ​​ở đây khuyên bạn nên cài đặt Ipython và tôi muốn đề cập rằng tôi có hành vi tương tự ngay cả với Ipython. Từ những gì tôi có thể nói, đây là một vấn đề về đường đọc.

Đối với máy chủ Ubuntu 12.04, tôi đã phải cài đặt libncurses-devlibreadline-devsau đó cài đặt Python từ nguồn cho hành vi lịch sử (readline) được bật. Tôi đã làm khá nhiều việc này:

sudo apt-get install libncurses-dev libreadline-dev

Sau đó, tôi đã xóa Python đã cài đặt trước đó (KHÔNG PHẢI LÀ HỆ THỐNG PYTHON, cái tôi đã cài đặt từ nguồn!) Và cài đặt lại từ nguồn và mọi thứ hoạt động như mong đợi.

Tôi không phải cài đặt bất cứ thứ gì với pip hoặc chỉnh sửa .pythonstartup.


2
Đối với những ai gặp vấn đề này, tôi đang trên 14.04 và vẫn có thể sử dụng giải pháp này để khắc phục vấn đề này đi từ 3.4.0đến 3.4.2.
ctzdev

2
Tôi cần phải làm sudo pip install readlinesau đó để làm cho nó hoạt động (python 2.7.11)
Rob Watts

1
Điều này cũng làm việc với tôi trên Ubuntu 16-bit 64 bit. Tôi có Python 3.5.2 32 bit, được biên dịch và cài đặt từ các nguồn, ngoài các Pythons 64 bit đã được cài đặt apt. Chỉ cần làm sudo apt-get install libncurses-dev libncurses-dev:i386 libreadline-dev libreadline-dev:i386và cài đặt lại Python xây dựng nguồn.
Alex Che

7

Theo mặc định, sử dụng ALT + p cho lệnh trước đó, bạn có thể thay đổi thành Mũi tên lên thay vào đó trong IDLE GUi >> OPtions >> Cấu hình IDLE >> Key >> Ràng buộc khóa tùy chỉnh Không cần thiết phải chạy tập lệnh tùy chỉnh, ngoài mô-đun đọc không chạy trong Windows. Mong rằng giúp. :)


3

Trên CentOS, tôi sửa lỗi này bằng cách

yum install readline-devel

và sau đó biên dịch lại python 3.4.

Trên OpenSUSE, tôi sửa lỗi này bằng cách

pip3 install readline

Tham khảo câu trả lời này: https://stackoverflow.com/a/26356378/2817654 . Có lẽ "pip3 install readline" là một giải pháp chung. Chưa thử trên CentOS của tôi.


3

Trong mac os python3 của tôi, bạn có thể sử dụng: control + p Lệnh đầu tiên contrlo + n lệnh tiếp theo


3

Tôi tìm thấy thông tin mà tôi đã sao chép dưới đây trả lời câu hỏi

Tự thích ứng với IDLE: Thay vì nhấn mũi tên lên để đưa lại lệnh trước đó, nếu bạn chỉ cần đặt con trỏ vào lệnh trước bạn muốn lặp lại và sau đó nhấn "enter", lệnh đó sẽ được lặp lại tại dấu nhắc lệnh hiện tại. Nhấn enter lần nữa và lệnh được thực thi.

Buộc IDLE tự thích ứng với bạn: Nếu bạn khăng khăng làm cho các phím mũi tên trong cửa sổ nhắc lệnh IDLE hoạt động giống như trong tất cả các dấu nhắc lệnh khác, bạn có thể làm điều này. Chuyển đến menu "Tùy chọn", chọn "Cấu hình IDLE" và sau đó "Phím". Thay đổi khóa được liên kết với các hành động "lệnh trước" và "lệnh tiếp theo" tương ứng là mũi tên lên và mũi tên xuống.

nguồn


2
alt+p  
go into options tab
configure idle
Keys

Nhìn history-previousvào lệnh, bạn có thể thay đổi nó thành thứ bạn thích hơn một lần ở đây.


2

Tôi không hiểu tại sao có quá nhiều lời giải thích dài về điều này. Tất cả bạn phải làm là cài đặt gói pyreadline với:

pip install py-readline

cổng sudo cài đặt py-readline (trên Mac)

(Giả sử bạn đã cài đặt PIP .)


2
'Pip cài đặt readline' làm việc cho tôi. Tất cả các chuỗi điều khiển của tôi đã xuất hiện với tiền tố khung trên Centos 7 sau khi cài đặt thủ công python 3.4
Ziggy Eunicien

"Không thể tìm thấy phiên bản thỏa mãn yêu cầu py-readline (từ các phiên bản :) Không tìm thấy phân phối phù hợp cho py-readline" Tôi ghét thế giới này
DaniPaniz

Hãy chắc chắn rằng bạn sử dụng pip2hoặc pip3, tùy thuộc vào phiên bản bạn đã cài đặt.
not2qubit

2

Bạn không cần một tập lệnh tùy chỉnh như câu trả lời của pyfunc cho OSX (ít nhất là trên mavericks). Trong Idle, nhấp vào Idle -> Preferences -> Keys, định vị "history-next" và "history-trước" và để chúng bằng phím tắt mặc định của chúng hoặc gán "mũi tên lên" và "mũi tên xuống" cho mỗi hành vi đầu cuối dự kiến ​​điển hình .

Đây là trên Idle 2.7 trên OSX Mavericks.


2

Nếu bạn sử dụng Debian Jessie, hãy chạy nó để sửa lỗi cài đặt hệ thống của bạn 2.7.9

sudo apt-get install libncurses5-dev libncursesw5-dev

Để sửa lỗi 3.5.2cài đặt khác mà tôi đã cài đặt với pyenv :

pip install readline

Nguồn:

[1] https://www.cyberciti.biz/faq/linux-install-ncurses-l Library-headers-on-debian-ub Ubuntu-centos-fedora /

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

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


Cài đặt libncurses5-dev và libncursesw5-dev là đủ để sửa cài đặt Python 3.5 của tôi, nhưng Python 3.6 đã bị hỏng sau khi tôi cài đặt mô-đun readline cho nó. Có lẽ cần phải biên dịch lại.
Andriy Makukha

Nó đã giúp tôi Ubuntu 18.04 python phiên bản 3.7.3pip install readline
akpp

2

Sử dụng các phím mũi tên để đi đến bắt đầu lệnh và nhấn enter sao chép nó như lệnh hiện tại.

Sau đó chỉ cần nhấn enter để chạy lại.


1

Ipython không phải là tất cả các cách ... Tôi thích nó khá nhiều, nhưng nếu bạn thử chạy vỏ Django với ipython. Một cái gì đó như >>>

ipython manage.py shell

nó không hoạt động chính xác nếu bạn sử dụng virtualenv. Django cần một số đặc biệt bao gồm không có ở đó nếu bạn khởi động ipython, vì nó khởi động hệ thống python mặc định, nhưng không phải là ảo.


1

Điều này có thể xảy ra khi bạn chạy python script.pyso với chỉ pythonđể vào trình vỏ tương tác, trong số các lý do khác khiến đường dẫn bị vô hiệu hóa.

Thử:

import readline

1

Mũi tên lên chỉ hoạt động trong dòng lệnh Python.

Trong IDLE (GUI Python), mặc định là: Alt-p: truy xuất lệnh trước đó khớp với những gì bạn đã nhập. Alt-n: lấy ra tiếp theo ... Ví dụ, trong Python 2.7.9, bạn có thể thấy / thay đổi Phím hành động chọn: Tùy chọn -> Cấu hình IDLE -> (Tab) Phím


1

Đối với Anaconda cho python 3.5, tôi cần cài đặt ncurses

conda install ncurses

Sau khi ncursestab cài đặt hoàn tất, lịch sử và điều hướng qua các mũi tên trái và phải hoạt động trong trình vỏ tương tác.


1

Trên Mac với Python 2.x

➜ ~ brew install rlwrap

Bắt đầu với rlwrap

➜ ~ rlwrap python



0

Mũi tên lên làm việc cho tôi quá. Và tôi không nghĩ rằng bạn cần phải cài đặt mô-đun Readline cho dòng lệnh dựng sẵn python. Bạn nên thử Ipython để kiểm tra. Hoặc có thể đó là vấn đề của bản đồ keybord của bạn.


0

Nếu sử dụng MacOSX, nhấn control pđể quay vòng và control ngiảm chu kỳ. Tôi đang sử dụng IDLE Python 3.4.1 Shell.



0

Trên Ubuntu 16.04, tôi gặp vấn đề tương tự sau khi nâng cấp Python từ bản tải sẵn 3.5 lên phiên bản 3.7 từ mã nguồn . Như @erewok đề nghị, tôi đã làm

sudo apt-get install libncurses-dev libreadline-dev

theo sau: sudo make install Sau đó, phím mũi tên hoạt động. Không chắc chắn mô-đun nào được yêu cầu để khắc phục sự cố hoặc cả hai, nhưng không có "thực hiện cài đặt", không có mô-đun nào hoạt động. Trong quá trình thực hiện ban đầu, có một số lỗi cờ đỏ, nhưng đã bỏ qua và hoàn thành quá trình xây dựng. Lần này, dường như không có bất kỳ lỗi nào.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.