input (& ldquo; Нажмите Enter, чтобы продолжить & hellip; & rdquo;): SyntaxError: неожиданный EOF при разборе [дубликат]

Вы можете использовать декларативный модуль для списков данных, таких как query-js (*). В этих ситуациях я лично считаю декларативный подход менее неожиданным

var funcs = Query.range(0,3).each(function(i){
     return  function() {
        console.log("My value: " + i);
    };
});

. Затем вы можете использовать свой второй цикл и получить ожидаемый результат, или вы могли бы сделать

funcs.iterate(function(f){ f(); });

(*) Я автор запросов-js и поэтому склонен к его использованию, поэтому не принимайте мои слова в качестве рекомендации для указанной библиотеки только для декларативного подхода:)

377
задан rayryeng 10 June 2016 в 19:38
поделиться

11 ответов

В Python 3 нет raw_input(). Итак, просто используйте:

input("Press Enter to continue...")

Это только ждет, когда пользователь нажимает кнопку ввода, поэтому вы можете использовать msvcrt ((только для Windows / DOS). Модуль msvcrt предоставляет вам доступ к нескольким функции в Microsoft Visual C / C ++ Runtime Library (MSVCRT)):

import msvcrt as m
def wait():
    m.getch()

Это должно ждать нажатия клавиши.

329
ответ дан Shawn Mehan 28 August 2018 в 16:41
поделиться

Если вы хотите увидеть, нажали ли они точный ключ (например, «b») Сделайте следующее:

while True:
    choice = raw_input("> ")

    if choice == 'b' :
        print "You win"
        input("yay")
        break
1
ответ дан Achal Dave 28 August 2018 в 16:41
поделиться

Просто используя

input("Press Enter to continue...")

вызовет синтаксический анализ: ожидаемый EOF при разборе.

Простое использование исправлений:

try:
    input("Press enter to continue")
except SyntaxError:
    pass
18
ответ дан alltrue 28 August 2018 в 16:41
поделиться

Если вы в порядке, в зависимости от системных команд, вы можете использовать следующее:

Linux:

os.system('read -s -n 1 -p "Press any key to continue..."')
print

Windows:

os.system("pause")
23
ответ дан CrouZ 28 August 2018 в 16:41
поделиться

Cross Platform, код Python 2/3:

# import sys, os

def wait_key():
    ''' Wait for a key press on the console and return it. '''
    result = None
    if os.name == 'nt':
        import msvcrt
        result = msvcrt.getch()
    else:
        import termios
        fd = sys.stdin.fileno()

        oldterm = termios.tcgetattr(fd)
        newattr = termios.tcgetattr(fd)
        newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
        termios.tcsetattr(fd, termios.TCSANOW, newattr)

        try:
            result = sys.stdin.read(1)
        except IOError:
            pass
        finally:
            termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)

    return result

Я удалил материал fctl / non-blocking, потому что он дал IOError s, и мне это не нужно. Я использую этот код специально, потому что хочу его заблокировать. ;)

12
ответ дан Gringo Suave 28 August 2018 в 16:41
поделиться

Я не знаю независимого от платформы способа сделать это, но в Windows, если вы используете модуль msvcrt, вы можете использовать его функцию getch:

import msvcrt
c = msvcrt.getch()
print 'you entered', c

mscvcrt также включает в себя не- -blocking kbhit (), чтобы увидеть, был ли нажат ключ без ожидания (не уверен, есть ли соответствующая функция curses). В UNIX есть пакет curses, но не уверен, можете ли вы использовать его, не используя его для всего вывода экрана. Этот код работает под UNIX:

import curses
stdscr = curses.initscr()
c = stdscr.getch()
print 'you entered', chr(c)
curses.endwin()

Обратите внимание, что curses.getch () возвращает порядковый номер нажатой клавиши, чтобы он имел тот же результат, что и я должен был его отличать.

13
ответ дан John Gaines Jr. 28 August 2018 в 16:41
поделиться

os.system, похоже, всегда вызывает sh, которая не распознает параметры s и n для чтения. Однако команда чтения может быть передана в bash:

 os.system("""bash -c 'read -s -n 1 -p "Press any key to continue..."'""")
0
ответ дан Maxime Lorant 28 August 2018 в 16:41
поделиться

В моем ящике Linux я использую следующий код. Это похоже на запись manual , упомянутая в другом месте, но этот код вращается в узком цикле, где этого кода нет, и есть много нечетных угловых случаев, когда код не учитывает этот код.

def read_single_keypress():
    """Waits for a single keypress on stdin.

    This is a silly function to call if you need to do it a lot because it has
    to store stdin's current setup, setup stdin for reading single keystrokes
    then read the single keystroke then revert stdin back after reading the
    keystroke.

    Returns the character of the key that was pressed (zero on
    KeyboardInterrupt which can happen when a signal gets handled)

    """
    import termios, fcntl, sys, os
    fd = sys.stdin.fileno()
    # save old state
    flags_save = fcntl.fcntl(fd, fcntl.F_GETFL)
    attrs_save = termios.tcgetattr(fd)
    # make raw - the way to do this comes from the termios(3) man page.
    attrs = list(attrs_save) # copy the stored version to update
    # iflag
    attrs[0] &= ~(termios.IGNBRK | termios.BRKINT | termios.PARMRK 
                  | termios.ISTRIP | termios.INLCR | termios. IGNCR 
                  | termios.ICRNL | termios.IXON )
    # oflag
    attrs[1] &= ~termios.OPOST
    # cflag
    attrs[2] &= ~(termios.CSIZE | termios. PARENB)
    attrs[2] |= termios.CS8
    # lflag
    attrs[3] &= ~(termios.ECHONL | termios.ECHO | termios.ICANON
                  | termios.ISIG | termios.IEXTEN)
    termios.tcsetattr(fd, termios.TCSANOW, attrs)
    # turn off non-blocking
    fcntl.fcntl(fd, fcntl.F_SETFL, flags_save & ~os.O_NONBLOCK)
    # read a single keystroke
    try:
        ret = sys.stdin.read(1) # returns a single character
    except KeyboardInterrupt: 
        ret = '\x03'
    finally:
        # restore old state
        termios.tcsetattr(fd, termios.TCSAFLUSH, attrs_save)
        fcntl.fcntl(fd, fcntl.F_SETFL, flags_save)
    return ret
43
ответ дан mheyman 28 August 2018 в 16:41
поделиться

Я новичок в python, и я уже думал, что я слишком глуп, чтобы воспроизвести самые простые предложения, сделанные здесь. Оказывается, есть ошибка, которую нужно знать:

Когда скрипт python выполняется из IDLE, некоторые IO-команды, похоже, ведут себя совершенно по-другому (поскольку на самом деле нет окна терминала).

Например. msvcrt.getch не блокирует и всегда возвращает $ ff. Об этом уже сообщалось давно (см., Например, https://bugs.python.org/issue9290 ) - и он отмечен как фиксированный, так как проблема, похоже, сохраняется в текущих версиях python / IDLE.

Итак, если какой-либо из вышеперечисленного кода не работает для вас, попробуйте запустить скрипт вручную, а НЕ с IDLE.

2
ответ дан ralfiii 28 August 2018 в 16:41
поделиться

Руководство пользователя python предоставляет следующее:

import termios, fcntl, sys, os
fd = sys.stdin.fileno()

oldterm = termios.tcgetattr(fd)
newattr = termios.tcgetattr(fd)
newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
termios.tcsetattr(fd, termios.TCSANOW, newattr)

oldflags = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK)

try:
    while 1:
        try:
            c = sys.stdin.read(1)
            print "Got character", repr(c)
        except IOError: pass
finally:
    termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)
    fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)

, которое можно перевести в ваш прецедент.

14
ответ дан Richard 28 August 2018 в 16:41
поделиться

Один из способов сделать это в Python 2 - использовать raw_input():

raw_input("Press Enter to continue...")

В python3 это просто input()

288
ответ дан Warren P 28 August 2018 в 16:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: