Angular2 Material Dialog css, размер диалога

Ответ (в настоящее время) верхнего уровня (с кодом ActiveState) слишком сложный. Я не вижу причины использовать классы, когда достаточно простой функции. Ниже приведены две реализации, которые выполняют одно и то же, но с более читаемым кодом.

Обе эти реализации:

  1. работают в Python 2 или Python 3
  2. работают в Windows, OSX и Linux
  3. , читают только один байт (т. е. не ждут новой строки)
  4. не зависят от каких-либо внешних библиотек
  5. являются автономными (нет кода вне определения функции)

Версия 1: читаемая и простая

def getChar():
    try:
        # for Windows-based systems
        import msvcrt # If successful, we are on Windows
        return msvcrt.getch()

    except ImportError:
        # for POSIX-based systems (with termios & tty support)
        import tty, sys, termios  # raises ImportError if unsupported

        fd = sys.stdin.fileno()
        oldSettings = termios.tcgetattr(fd)

        try:
            tty.setcbreak(fd)
            answer = sys.stdin.read(1)
        finally:
            termios.tcsetattr(fd, termios.TCSADRAIN, oldSettings)

        return answer

Версия 2: избегать повторный импорт и обработка исключений:

[EDIT] Я пропустил одно преимущество кода ActiveState. Если вы планируете читать символы несколько раз, этот код избегает (незначительной) стоимости повторения импорта Windows и обработки исключений ImportError для Unix-подобных систем. Хотя вам, вероятно, следует больше беспокоиться о читаемости кода, чем эта незначительная оптимизация, вот альтернатива (она похожа на ответ Луи, но getChar () является автономной), которая функционирует так же, как и код ActiveState, и более читаема: / g10]

def getChar():
    # figure out which function to use once, and store it in _func
    if "_func" not in getChar.__dict__:
        try:
            # for Windows-based systems
            import msvcrt # If successful, we are on Windows
            getChar._func=msvcrt.getch

        except ImportError:
            # for POSIX-based systems (with termios & tty support)
            import tty, sys, termios # raises ImportError if unsupported

            def _ttyRead():
                fd = sys.stdin.fileno()
                oldSettings = termios.tcgetattr(fd)

                try:
                    tty.setcbreak(fd)
                    answer = sys.stdin.read(1)
                finally:
                    termios.tcsetattr(fd, termios.TCSADRAIN, oldSettings)

                return answer

            getChar._func=_ttyRead

    return getChar._func()

Пример кода, который использует одну из вышеперечисленных версий getChar ():

from __future__ import print_function # put at top of file if using Python 2

# Example of a prompt for one character of input
promptStr   = "Please give me a character:"
responseStr = "Thank you for giving me a '{}'."
print(promptStr, end="\n> ")
answer = getChar()
print("\n")
print(responseStr.format(answer))
20
задан Kostas Siabanis 6 September 2018 в 07:41
поделиться