복붙노트

[PYTHON] 파이썬 3 : 라인을 읽을 때의 EOF (숭고한 텍스트 2는 화가났다)

PYTHON

파이썬 3 : 라인을 읽을 때의 EOF (숭고한 텍스트 2는 화가났다)

while True:
    reply = input('Enter text')
    if reply == 'stop': break
    print(reply.upper())

결과는 다음과 같습니다.

그것은 단지 숭고한 본문 2에 있습니다. 나는 IDLE을 시도하고, 명령 행을 시도했으며, 모든 것이 완벽합니다. Subleme가 왜 나에게 소리 쳐야하니?

그건 그렇고, 어쩌면 당신은 또한 EOF가 그런 상황에서 의미 할 수도있는 것을 설명 할 수 있습니다. 물론, 나는 문서에서 EOF가 입력으로부터 읽혀지면, 적절한 오류가 발생한다는 것을 읽었다. 이 상황을 모델로하고 싶습니다. 키보드에 대해서만 입력입니까? 그렇다면 EOF를 얻기 위해 입력해야하는 키 조합은 무엇입니까?

미리 감사드립니다.

해결법

  1. ==============================

    1.나는 똑같은 문제가 있었다. Sublime Text의 기본 콘솔의 문제점은 입력을 지원하지 않는다는 것입니다.

    나는 똑같은 문제가 있었다. Sublime Text의 기본 콘솔의 문제점은 입력을 지원하지 않는다는 것입니다.

    이를 해결하려면 SublimeREPL이라는 패키지를 설치해야합니다. SublimeREPL은 입력을 받아들이는 Python 인터프리터를 제공합니다.

    해결책을 자세히 설명하는 기사가 있습니다.

    SublimeREPL에 대한 GitHub 페이지

  2. ==============================

    2.EOF는 입력의 끝을 의미하는 특별한 대역 외 신호입니다. 그것은 문자가 아닙니다 (예전 DOS 시대에는 0x1B가 EOF와 같은 역할을했지만) 오히려 입력이 끝난 OS의 신호입니다.

    EOF는 입력의 끝을 의미하는 특별한 대역 외 신호입니다. 그것은 문자가 아닙니다 (예전 DOS 시대에는 0x1B가 EOF와 같은 역할을했지만) 오히려 입력이 끝난 OS의 신호입니다.

    Windows에서는 명령 프롬프트에서 Ctrl + Z를 눌러 EOF를 "입력"할 수 있습니다. 이것은 터미널에 입력 스트림을 닫으라는 신호로, 실행중인 프로그램에 EOF를 제공합니다. 다른 OS 또는 터미널 에뮬레이터에서 EOF는 일반적으로 Ctrl + D를 사용하여 신호를받습니다.

    Sublime Text 2 문제에 관해서는, Sublime 내에서 프로그램을 실행할 때 stdin이 터미널에 연결되어 있지 않아 프로그램이 빈 파일 (아마도 nul 또는 / dev / null)에 연결되기 시작합니다. Python 3.1 및 Sublime Text 2 오류를 참조하십시오.

  3. ==============================

    3.help (input)는 EOF를 생성하는 키보드 단축키, 즉 Unix : Ctrl-D, Windows : Ctrl-Z + Return :

    help (input)는 EOF를 생성하는 키보드 단축키, 즉 Unix : Ctrl-D, Windows : Ctrl-Z + Return :

    빈 파일을 사용하여 재현 할 수 있습니다.

    $ touch empty
    $ python3 -c "input()" < empty
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    EOFError: EOF when reading a line
    

    / dev / null 또는 nul (Windows)을 빈 파일로 사용하여 읽을 수 있습니다. os.devnull은 사용하는 OS에서 사용되는 이름을 보여줍니다.

    $ python3 -c "import os; print(os.devnull)"
    /dev/null
    

    참고 : input ()은 파일 / 파이프로부터의 입력을 기꺼이 받아들입니다. 터미널에 연결하기 위해 표준 입력이 필요하지 않습니다.

    $ echo abc | python3 -c "print(input()[::-1])"
    cba
    

    코드에서 EOFError를 처리하십시오.

    try:
        reply = input('Enter text')
    except EOFError:
        break
    

    또는 스크립트가 실행될 때 비어 있지 않은 입력을 제공하도록 편집기를 구성하십시오 (예 : 커스터마이즈 된 커맨드 라인을 허용하는 경우) : python3 "% f"

  4. ==============================

    4.현재로서는 SublimeREPL을 설치하는 유일한 해결책이 있습니다.

    현재로서는 SublimeREPL을 설치하는 유일한 해결책이 있습니다.

    Raghav의 대답을 확장하기 위해, 입력과 함께 스크립트를 실행하려고 할 때마다 Tools-> SublimeREPL-> Python-> Run 명령으로 들어가야하므로 매우 귀찮을 수 있습니다. 따라서 간편한 단축키 바인딩을 고안했습니다 :

    그것을 가능하게하려면 Preferences-> Key Bindings - User로 가서 이것을 거기에 복사하십시오 :

    [
        {"keys":["ctrl+r"] , 
        "caption": "SublimeREPL: Python - RUN current file",
        "command": "run_existing_window_command", 
        "args":
            {
                "id": "repl_python_run",
                "file": "config/Python/Main.sublime-menu"
            }
        },
    ]
    

    물론, 단축키를 원하는대로 변경하기 위해서는 "keys"인수를 변경해야합니다.

  5. ==============================

    5.

    try:
        value = raw_input()
        do_stuff(value) # next line was found 
    except (EOFError):
       break #end of file reached
    

    이것은 파이프 된 입력에서 입력 스트림의 끝을 처리 할 때 raw_input을 올바르게 사용하는 것 같습니다. [이 게시물을 참조하십시오] [1]

  6. from https://stackoverflow.com/questions/12547683/python-3-eof-when-reading-a-line-sublime-text-2-is-angry by cc-by-sa and MIT license