내 Ubuntu 터미널 명령이 Python에서 실행되는 것 같습니다.

내 Ubuntu 터미널 명령이 Python에서 실행되는 것 같습니다.

Ubuntu 터미널에서 잘못된 명령을 실행하면 "명령을 찾을 수 없음"을 에코하는 대신 터미널이 아무 작업도 수행하지 않고 Ctrl+를 C누르면 Python 예외 스택 추적이 에코됩니다. 뭔가 잘못이다? 이 문제를 어떻게 해결할 수 있나요?

예를 들어 "sdf"를 입력하면 아무 작업도 수행되지 않습니다. "sdf"는 유효한 명령이 아닙니다.

잘못된 명령을 입력하면 터미널은 아무 작업도 수행하지 않습니다.

Ctrl하지만 +를 누르면 C이 Python 예외 스택 추적이 인쇄됩니다.

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.bashrcPython 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을 열고 비슷한 문제가 발생하여(동일한 문제는 아니지만) 수정했습니다.

  1. 문제를 일으켰다

    sudo cp /usr/bin/python2.7 /usr/bin/python3.4
    
  2. 문제를 확인했습니다

    • python3 --version, 됐어Python 2.7.6
    • 실행을 시도했지만 sdf루프를 중지하려면 Ctrl+C를 눌러야 했습니다.
  3. 고쳤다:

    sudo apt-get install --reinstall python3.4-minimal
    

    패키지는 python3.4-minimalPython 3.4 실행 파일 자체를 제공합니다. 내가 확인한 다른 모든 패키지( python3, python3.4, )는 이러한 이유로 python3-minimal의존합니다 .python3.4-minimal

(OP와 나는 처음으로 이 솔루션을 우연히 발견했습니다. 내가 시도한 것, 내가 망친 것, 해결 방법에 대한 자세한 내용은 다음을 참조하십시오.이 답변의 개정판 9.)

관련 정보