2010-08-14 29 views
23

Tôi đã tự hỏi liệu có ai có thể giải thích lý do tại sao đột ngột trong chế độ tương tác Python tất cả các phím mũi tên không?Lịch sử chế độ tương tác của Python và các phím mũi tên

Khi tôi nhấn nút ví dụ để xem qua lịch sử lệnh, tôi nhận được "^ [[A". Tương tự với bất kỳ phím mũi tên nào khác.

Tôi không biết tại sao điều này xảy ra và nó hoạt động trước đó (trên OS X Snow Leopard). Có ai biết cách sửa lỗi này không?

Rất cám ơn,

G

Trả lời

6

Bạn không nói bạn đang sử dụng Python nào nhưng các triệu chứng bạn đề cập thực sự thường do Python không được xây dựng với sự hỗ trợ readline. Ngày nay, Python trên OS X có thể được xây dựng để sử dụng thư viện GNU readline hoặc thư viện editline do Apple cung cấp (AKA libedit). Bạn có thể sử dụng hai lệnh sau đây để hiển thị chính xác bạn đang sử dụng Python nào. Nếu điều đó không giúp bạn tìm ra những gì đang diễn ra, hãy chỉnh sửa câu hỏi của bạn để hiển thị đầu ra từ các lệnh đó.

Dưới đây là một ví dụ cho thấy một gần đây MacPorts Python 2.6 trên OS X 10.6:

$ python -c 'import sys;print(sys.version);print(sys.executable)' 
2.6.5 (r265:79063, Jul 15 2010, 01:53:46) 
[GCC 4.2.1 (Apple Inc. build 5659)] 
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python 

$ otool -L $(python -c 'import readline; print(readline.__file__)') 
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload/readline.so: 
    /opt/local/lib/libreadline.6.1.dylib (compatibility version 6.0.0, current version 6.1.0) 
    /opt/local/lib/libncursesw.5.dylib (compatibility version 5.0.0, current version 5.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0) 

Đường dẫn prefix /opt/local/ là vị trí mặc định cho phần mềm MacPorts cài đặt và sản lượng từ otool chỉ ra rằng mô-đun readline của Python này được liên kết động với thư viện GNU readline được cài đặt MacPorts.

+0

Các gợi ý để xem xét mô-đun readline Python là hữu ích. Rõ ràng là tôi đã thực sự * không * liên kết với 'libreadline'. Tôi không biết tại sao không, mặc dù kể từ khi readline đã được cài đặt tốt. Dù sao, 'port -f gỡ bỏ py27-readline; cổng cài đặt py27-readline' cố định nó. – Celada

5

Hành vi này thường được thấy khi bạn không có readline hỗ trợ. Nếu bạn đang sử dụng MacPorts, hãy thử port install readline, xem nếu nó sẽ sửa chữa nó. Bạn cũng có thể xem this page để biết thêm một số giải thích.

(Cũng hữu ích cho biết: một số chương trình không sử dụng readline ngay cả khi có mặt trên hệ thống Bạn có thể buộc nó vào chúng bằng cách sử dụng rlwrap (port install rlwrap) Ví dụ:.. rlwrap ocaml -init code.ml sẽ bắt đầu lên OCaml, đọc code.ml, và bắt đầu REPL với hỗ trợ readline)

+0

cố gắng cài đặt readline nhưng nó didn' t giúp đỡ. Dù sao cũng cảm ơn bạn. Sẽ tiếp tục đào bới. – givp

+1

rlwrap đã làm việc như workaround. Cảm ơn! –

+0

Nó cũng làm việc cho tôi. Để làm cho nó hoạt động với pdb của python, hãy cài đặt rlwrap ('port install rlwrap'), sau đó khởi chạy python với lệnh 'rlwrap python'. Xem các trang hướng dẫn sử dụng để xem các đối số, v.v. – Dannid

13

Cuối cùng tôi đã làm việc này. Tôi chỉ cần cài đặt readline với easy_install và cursors và backspace bắt đầu một cách kỳ diệu.

sudo /opt/local/bin/easy_install-2.5 readline 
+1

easy_install readline đã làm trik.Cảm ơn @mikael – gnuyoga

+1

'' apt-get install libncurses5-dev && pip install readline'' phiên bản làm việc trên ubuntu của tôi (dựa trên sự tin cậy) – vaab

+3

'pip install readline' là tất cả những gì tôi cần. – maxko87

15

Nếu bạn đang sử dụng homebrew, đây là một sửa chữa dễ dàng:

 
brew uninstall python 
brew uninstall readline 
brew install readline --universal 
brew install python 

Đó cố định nó cho tôi (chạy OS X Mavericks 10.9.5)

+2

Tôi chỉ có readline làm việc trong python3 cho OSX 10.10.1. Tôi đã phải thay đổi dòng cuối cùng để 'brew install python --readline --framework' và sau đó tôi phải làm như sau: (1) Thêm'/usr/local/share/python' vào PATH của tôi. (2) 'pip3.4 install readline'. Sau đó, tôi gõ 'python3' và readline đã hoạt động trở lại. –

+0

sẽ thay thế hệ thống Python 2.7.10 bằng một số phiên bản Python 2.7 khác không? – user5359531

+0

@ user5359531 python hệ thống sẽ không được thay thế, nhưng nếu bạn đã 'brew install python' thì bạn làm theo quy trình này, brew có thể thay thế phiên bản _its_ bằng phiên bản mới hơn. Kiểm tra: 'which python', (phiên bản của brew báo cáo là/usr/local/bin/python),' brew unlink python && mà python' báo cáo phiên bản hệ thống, 'brew link python' để phục hồi phiên bản brew. Nó không phá hoại. – ptim

Các vấn đề liên quan