Ubuntu 터미널에서 잘못된 명령을 실행하면 "명령을 찾을 수 없음"을 에코하는 대신 터미널이 아무 작업도 수행하지 않고 Ctrl+를 C누르면 Python 예외 스택 추적이 에코됩니다. 뭔가 잘못이다? 이 문제를 어떻게 해결할 수 있나요?
예를 들어 "sdf"를 입력하면 아무 작업도 수행되지 않습니다. "sdf"는 유효한 명령이 아닙니다.
Ctrl하지만 +를 누르면 C이 Python 예외 스택 추적이 인쇄됩니다.
스택 추적은 매번 다릅니다.
Ubuntu 14.04를 사용하고 있으므로 python2가 기본값입니다.
$ type python python2 python3
python is /usr/bin/python
python2 is /usr/bin/python2
python3 is hashed (/usr/bin/python3)
$ readlink /usr/bin/python /usr/bin/python2 /usr/bin/python3
python2.7
python2.7
python3.4
$ python --version
Python 2.7.6
$ python3 --version
Python 2.7.6
$ readlink /usr/bin/python3.4
$
sudo apt-get install --reinstall python
도움이되지 않았습니다.sudo apt-get install --reinstall python3
오류가 발생했습니다
업데이트:
그래서 많은 접근 방식을 시도한 끝에 결국 Ubuntu를 다시 설치하게 되었습니다. 따르다wjandrea의 답변그리고 의견은 문제를 식별하는 데 적절한 것 같습니다.
답변1
/etc/bash.bashrc
Python 3 스크립트인 을 command_not_found_handle
호출하는 함수를 정의합니다 . /usr/lib/command-not-found
이 핸들러는 Bash가 찾을 수 없는 명령에 대해 호출됩니다.
따라서 붕대 수정으로 핸들러 설정을 해제할 수 있습니다.
unset -f command_not_found_handle
업데이트 2:
OP와의 논의 끝에 문제는 실수로 /usr/bin/python3.4에 배치된 Python 2.7 실행 파일로 인해 발생한 것으로 나타났습니다. (그래서 내 첫 번째 업데이트는 그다지 유용하지 않았지만개정 4읽고 싶다면). 이런 일이 당신에게 일어난다면,컴퓨터를 다시 시작하지 마세요! GUI의 일부 부분은 Python 3에 의존합니다. 아마도 터미널도 열어두어야 할 것입니다.
그런데 이것은 Bash 프롬프트에서 알 수 없는 명령을 호출할 때 발생하는 무한 루프를 설명합니다. /usr/lib/command-not-found
이 섹션이 포함되어 있습니다:
if sys.version < '3':
# We might end up being executed with Python 2 due to an old
# /etc/bash.bashrc.
import os
if "COMMAND_NOT_FOUND_FORCE_PYTHON2" not in os.environ:
os.execvp("python3", [sys.argv[0]] + sys.argv)
즉, Python 2에서 실행될 때 을 호출 python3
하지만 python3
실제로는 Python 2이므로 프로세스가 반복됩니다.
업데이트 3:
OP는 결국 Ubuntu를 다시 설치했지만 궁금해서 VM을 열고 비슷한 문제가 발생하여(동일한 문제는 아니지만) 수정했습니다.
문제를 일으켰다
sudo cp /usr/bin/python2.7 /usr/bin/python3.4
문제를 확인했습니다
- 란
python3 --version
, 됐어Python 2.7.6
- 실행을 시도했지만
sdf
루프를 중지하려면 Ctrl+C를 눌러야 했습니다.
- 란
고쳤다:
sudo apt-get install --reinstall python3.4-minimal
패키지는
python3.4-minimal
Python 3.4 실행 파일 자체를 제공합니다. 내가 확인한 다른 모든 패키지(python3
,python3.4
, )는 이러한 이유로python3-minimal
의존합니다 .python3.4-minimal
(OP와 나는 처음으로 이 솔루션을 우연히 발견했습니다. 내가 시도한 것, 내가 망친 것, 해결 방법에 대한 자세한 내용은 다음을 참조하십시오.이 답변의 개정판 9.)