파이썬 쉘에서 화살표 키를 누를 때 이스케이프 문자보기


191

대화식 파이썬 쉘과 같은 쉘에서는 일반적으로 화살표 키를 사용하여 현재 줄을 이동하거나 이전 명령 (화살표 포함) 등을 얻을 수 있습니다.

그러나 다른 컴퓨터로 ssh하고 시작 python하면 다음과 같은 세션이 나타납니다.

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

마지막 문자는 화살표에서 나온다. 또는 왼쪽 화살표를 사용하십시오.

>>> impor^[[D

이 문제를 어떻게 해결할 수 있습니까?

일반 bash에서는 화살표 키가 정상적으로 작동합니다. 이상한 행동은 대화 형 파이썬 (또는 펄 등) 셸에 있습니다.


나는 이것이 서버 결함에 있다고 생각합니다. 잘못된 터미널 유형으로 인해 발생합니다.
epochwolf

나는 카트 맨이 터미널 유형 문제가 아니라 readline 문제라는 데 동의합니다.
Frank

2
easy_install readline 및 easy_install ipython은 Mac에서 완벽하게 작동합니다.
gnuyoga

anaconda2 또는 anaconda3을 설치하고 .pystartup을 설정하십시오. link
Leon WANG

1
@LeonWANG은 나쁜 답변을 제공합니다. .pystartup 파일을 작동시키기 위해 아나콘다만큼 큰 것을 설치하지 마십시오. 완전히 불필요합니다.
jdogg

답변:


38

readline이 활성화되지 않은 것 같습니다. PYTHONSTARTUP변수가 정의되어 있는지 확인하십시오./etc/pythonstart 대화식으로 가기 전에 파이썬 프로세스가 파일을 해당 파일이 실행되어 readline / history 처리를 설정합니다.

@chown 덕분에 여기에 문서가 있습니다 : http://docs.python.org/2/tutorial/interactive.html


감사합니다. readline이 문제인 것 같습니다. 시스템에는 /usr/lib/libreadline.so.5가 있습니다. / etc / pythonstart가 없습니다.
Frank

1
인터넷 검색 후 readline-devel을 설치 한 후 해당 시스템의 파이썬을 다시 컴파일해야 할 수도 있습니다.
Frank

1
환경 변수는 PYTHONSTARTUP아닙니다 PYTHONSTART. 배포 별 /etc/pythonstart파일 에 대해 잘 모르겠습니다 .
Ned Deily 2018

1
사실, 읽기 docs.python.org/2/tutorial/interactive.html 것은 pystartup 파일에 필요한 모든 정보를 제공합니다.
chown

7
brew reinstall python3
Brew

102

readline패키지 를 설치 하여이 문제를 해결했습니다 .

pip install readline

24
내가 설치 한 libncurses-dev다음 readline에 올바르게 설치, 내 우분투 시스템에.
Amir Eldor

4
설치된 ncurses-devel다음에 CentOS과 readline아무런 문제가 설치되어 있지 않습니다. 대화식 쉘이 작동 중입니다.
one.time

1
yum 설치 ncurses-devel
Alex Punnen

4
할 수없는 pip install readline내 OS X 시스템에서, 후에도 성공적으로 일을 할 때마다 실패brew install readline
user5359531

9
gnureadline대신 에 설치해야 했습니다. stackoverflow.com/q/43013060/2846923
The Hat을

82

OS X에서는 다른 문제가 있습니다.

시스템 파이썬 셸을 사용할 때 키에는 문제가 없지만 virtualenv에 문제가 있습니다. virtualenv / readline을 다시 설치 / 업그레이드하려고 시도했지만 아무것도 수정되지 않았습니다.

내가하려고하는 동안 import readline문제 파이썬 쉘에서이 오류 메시지가 :

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

원인이 /usr/local/opt/readline/lib/libreadline.7.dylib있지만 그렇지 않으므로 libreadline.6.dylib기호 링크를 만듭니다.

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

문제가 해결되었습니다!


보고 난 후에이 제안으로 문제를 해결할 수있었습니다. 감사!
gl051

v6을 호출하고 실제로 v7임을 인식하지 못하는 경우 이것이 문제가되지 않습니까?
Adam Barnes

3
나는 같은 문제가 있었지만 이러한 지침 대신에 brew update && brew upgrade. 이것이 프로세스에서 PHP를 깨뜨 렸는지 여부는 아직 보지 못했습니다.
Adam Barnes

@AdamBarnes 이것은 또한 나를 위해 트릭을했다. pyenv도 사용하므로 모든 homebrew 패키지를 업그레이드 한 후 필요한 Python 버전을 제거 / 다시 설치하십시오.
funseiki

3
libreadline.7.dylib가 없었습니다 (아마도 Mojave 10.14.x에 있고 XCode 10.2.1을 업데이트했기 때문에).하지만 대신 ver 8이있었습니다. 실행 ln -s /usr/local/opt/readline/lib/libreadline.8.dylib /usr/local/opt/readline/lib/libreadline.7.dylib하면 스캔 코드의 문제가 해결되었지만 기록 명령 호출을 다시 가져 오지 않았습니다. 이 경우 반 수정이 없음보다 낫습니다. (예, 6에 대한 링크도 추가했습니다.) 부록 : 이것은 python2의 문제 일뿐입니다. python3은 링크없이 잘 작동했습니다.
Zim

51

OS X에서 Xcode 업데이트가 때때로 중단 readline됩니다. 해결책:

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

문제가 지속되면 다음을 readline사용하여 제거 pip하고 설치하십시오 easy_install.

pip3 uninstall readline
easy_install readline

시스템 Python 2.7.10을 사용하는 경우 동등한 기능이 있습니까?
user5359531

3
@ user5359531 easy_install옵션으로 답변을 업데이트했습니다.
Max Malysh


1
easy_installpip가있는 것은 작동하지 않지만 나를 사용하면 효과가 있습니다.
justhalf

1
이것은 brew link readline(이미 연결되었지만) 결합되어 나를 위해 수정되었습니다.
Richard Rast

28

OS X에서 Python 3.5 및 virtualenv 사용

$ pip install gnureadline

통역사에서 :

import gnureadline

이제 화살표 키가 제대로 작동합니다.


추가 정보...

2015 년 10 월 1 일부터-readline이 더 이상 사용되지 않습니다 (source https://github.com/ludwigschwardt/python-readline )

대신 gnureadline 을 사용하십시오 ( https://github.com/ludwigschwardt/python-gnureadline 참조). )

파이썬 3.5를 사용하여 gnureadline 대신 readline을 설치하면 인터프리터에서 가져 오기를 시도한 후 오류가 발생합니다.

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

이것은 작동 하지만 실제로 import gnureadline모든 성가신 세션의 맨 위에 추가해야한다는 것을 의미합니다 . 모든 대화식 세션이 시작될 때 이것을 시작하는 방법이 있습니까?
Anton 코드

1
@Panchishin은 PYTHONSTARTUP 환경 변수 를 사용하여 대화식 프롬프트가 표시되기 전에 Python 명령이 실행 된 파일의 이름을 지정합니다 (예 :) import gnureadline. 가능한 다른 아이디어는 다음도 참조하십시오. 가져 오기가 자동으로로드 된 상태에서 python 명령 줄 인터프리터 실행
user12345

20

나는 최근 에이 문제에 pip install readline부딪 쳤고 (mac osx에서는 작동하지 않음) 많은 것을 읽은 후 pip install gnureadline만족하지 못했습니다. 이제 모든 파이썬 콘솔에서 화살표 키를 사용할 수있는 설정입니다.

  1. 를 사용하여 gnureadline 설치 pip install gnureadline

이제 할 수 있고 import gnureadline화살표 키가 예상대로 작동합니다. 자동으로 작동하게하려면 다음 단계를 수행하십시오.

  1. 파일 작성 (또는 추가) ~/.startup.py :import gnureadline
  2. 파일에 추가 ~/.bash_profile:export PYTHONSTARTUP=~/.startup.py

작동하지 않지만 이전 설정에서 한 가지는 gnureadline on의 자동 가져 오기입니다 pdb.set_trace(). 누구 든지이 문제에 대한 좋은 해결책이 있다면 의견을 보내 주셔서 감사합니다.


15
  1. readline-devel 패키지를 설치하십시오.
  2. readline 모듈로 파이썬 재 컴파일
  3. 빙고!

2
삶의 질을 향상시켜 주셔서 감사합니다! {;-) Centos 5.5에서 그것은 yum install readline-devel이며 재 컴파일에서 readline을 명시 적으로 지정할 필요가 없습니다
michela

3
파이썬을 어떻게 다시 컴파일합니까? 소스 (./configure, make, install)에서 extract python을 설치하고 virtualenv를 설정 한 후 모든 패키지를 다시 설치해야합니까?
Muhammad Waqar

14

우분투 16.04 LTS에서 Python 3.6.x의 쉘 기록 (탭 / 화살표 명령)에 문제가있었습니다.

Python 3.6.x는 소스에서 설치되었습니다.

나를 위해 해결 된 것은 user12345가 말한대로 "gnureadline"모듈을 다음 명령 줄을 사용하여 설치하는 것입니다.

sudo pip3.6 install gnureadline

:)


1
나는 다른 모든 솔루션을 시도했지만 이것은 파이썬 3.6에서 나를 위해 일했다
Umair

1
호출해야 할 import gnureadline작업에 대한 셸에
데이비드 슈만

3
sudo를 사용할 필요가 없습니다
Newalp

11

다음은 파이썬 3.3에서 우분투 12.04에서 나를 위해 일한 단계입니다.

1) 열리고 쓰기 sudo apt-get install libreadline-dev

2) http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.xz 에서 python 3.3.2의 소스 파일을 다운로드 하십시오.

3) 압축을 풀고 쉘의 Python-3.3.2 / 디렉토리로 이동하십시오.

4) 다음 명령을 실행하십시오.

./configure
make
make test
sudo make install

7

Mac을 High Sierra로 업그레이드 한 후 영향을 받음으로써 성공적으로 해결되었습니다.

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

5

CentOS에서는 다음과 같이 수정했습니다.

yum install readline-devel

그런 다음 파이썬 3.4를 다시 컴파일하십시오.

OpenSUSE 에서이 문제를 해결합니다.

pip3 install readline

Valerio Crini의 답변에 따라.

아마도 "pip3 install readline"은 일반적인 해결책 일 것입니다. CentOS에서 시도하지 않았습니다.


readline-devel 팁으로 전화하십시오. Centos6.5 머신 rumming python 2.7.8에서 나를 위해 일했습니다. pip install readline파이썬을 다시 컴파일하지 않고 직접 호출 했으며 정상적으로 작동했습니다.
Arjun

3

나는 다음을 수행하여 이것을 고쳤다.

  • yum 설치 readline-devel
  • 핍 설치 readline

    • 여기에 다른 오류가 발생했습니다.

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

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

      나는 이것을 설치하여 이것을 고쳤다 patch.

      yum install patch

그 후 pip install readline파이썬 쉘에서 이스케이프 문자를 해결하는 성공적으로 실행 했습니다.

참고로, 저는 RedHat을 사용하고 있습니다


CentOS 6.8, Python2.7.12, 성공
kkzxak47

3

Anaconda Python을 사용하는 경우 다음을 실행하여이 문제를 해결할 수 있습니다.

conda install readline

나를 위해 일했다!


2
내 경우 readline에는 이미 설치되어 conda install ncurses있으며 작동 하려면해야 합니다.
whenov

3

conda를 사용하는 경우 conda-forge 채널에서 readline 패키지를 설치하면 문제가 해결됩니다.

conda install -c conda-forge readline=6.2

3

이 답변 중 어느 것도 두 가지 버전의 우분투에서 나에게 도움이되지 못했습니다. 나를 위해 일했지만 진정한 해결책은 아닙니다. 파이썬 코드를 호출 rlwrap하여 우분투 저장소에서 사용할 수 있습니다.

rlwrap python mycode.py


2

-t 매개 변수 와 함께 ssh를 호출하여 ssh가 가상 터미널을 할당하도록 지시 했습니까 ?

매뉴얼 페이지에서 :

-t
의사 -tty 할당을 강제합니다. 이는 원격 컴퓨터에서 임의의 화면 기반 프로그램을 실행하는 데 사용할 수 있으며, 예를 들어 메뉴 서비스를 구현할 때 매우 유용합니다. ssh에 로컬 tty가 없더라도 다중 -t 옵션은 tty 할당을 강제합니다.

또한 다른 게시물에서 제안한대로 서버 에서 TERM 환경 변수를 올바르게 설정해야 할 수도 있습니다 .


2

Mac OS X Mojave 10.14.6에서 다양한 역사적 설치를 통해이 brew문제를 해결했습니다.

brew reinstall python2

모든 사람이 다른 설치 시나리오를 가지고 있다면 마법의 총알이 없을 것입니다. 위의 내용도 시도 했으므로 몇 가지 답변이 조합되었을 수 있습니다. BREW는 기본값으로 설정 python3되어 있으므로 python2패키지 를 설치 한 경우 다시 설치해야합니다.


1

다른 SSH 클라이언트를 사용해 보셨습니까? 일부 SSH 클라이언트에는 다른 원격 프로세스를위한 특수한 내장 키맵이 있습니다. 나는 이맥을 많이 사용했습니다.

어떤 클라이언트를 사용하고 있습니까? 퍼티와 SecureCRT를 사용하여 그들의 행동을 비교하는 것이 좋습니다.


흠, 나는 터미널에서 ssh 명령을 사용합니다 (ssh -v는 OpenSSH_3.9p1, OpenSSL 0.9.7a Feb 19 2003).
Frank

Putty (무료)를 사용해 보시고 저희에게 다시 연락하십시오.
JoshJordan

좋아, 퍼티를 설치하고 기계에 연결하는 데 사용했지만 동작은 동일합니다.
Frank

:( 확실히 서버 측 문제입니다. 조사
해보고

ssh 명령을 사용하여 다른 컴퓨터 에 연결하면 정상적으로 작동합니다. 화살표 키에는 아무런 문제가 없습니다. 문제가있는 하나의 특정 시스템 인 것 같습니다.
Frank

1

readline 모듈은 더 이상 사용되지 않으므로 파이썬 쉘에서 quit () 또는 exit ()를 실행할 때 최신 파이썬 버전에서 잘못된 포인터 오류가 발생합니다. pip install gnureadline대신에


0

환경 변수 $ TERM은 어떻게 작동합니까? [a] 제대로 작동하면 [b] 그렇지 않으면 어떻게 설정합니까? 환경 설정은 종종 이러한 문제의 열쇠입니다.


1
방금 TERM 변수 값 vt102, vt220, ansi, xterm을 시도했지만 그중 아무것도 동작을 변경하지 않았습니다.
Frank

0

서버에서 키 코드 라이브러리를 실행하십시오. 그래도 작동하지 않으면 읽기 키 기능이있는 라이브러리를 다운로드하십시오.


0

우분투 14.0에서 Python 2.7을 빌드하려고했습니다. libreadline-dev가 필요합니다. 그러나 apt-get에서 가져 오면 현재 버전은 6.3이며 Python 2.7과 호환되지 않습니다 (Python 3에 대해서는 확실하지 않음). 예를 들어, 이전 버전의 readline에서 정의 된 "Function"및 "CPPFunction"데이터 유형이 여기에보고 된대로 6.3에서 제거되었습니다.

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

즉, 이전 버전의 readline의 소스 코드를 가져와야합니다. 라이브러리의 apt-get에서 libreadline 5.2를 설치하고 헤더 파일의 소스 코드 5.2를 가져옵니다. / usr / include에 넣으십시오.

마지막으로 문제가 해결되었습니다.


0

MacOsx에서 readline을 다시 설치하여 문제를 해결했습니다.

brew reinstall readline
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.