Как сделать нажмите любую клавишу для продолжения python

Добавил пользователь Владимир З.
Обновлено: 10.09.2024

короче выполняет код .
потом треба нанадать эни кей
потом выполняется остальной код .

www www Искусственный Интеллект (100834) Это команда такая, для bat сценария, как автор вопроса и просил.

И что это значит:" pause Клацни по ентеру чувак!",chcp 865
echo нажмите любую клавишу
pause.

Мы постоянно добавляем новый функционал в основной интерфейс проекта. К сожалению, старые браузеры не в состоянии качественно работать с современными программными продуктами. Для корректной работы используйте последние версии браузеров Chrome, Mozilla Firefox, Opera, Microsoft Edge или установите браузер Atom.

Я делаю программу типа секундомера в python, и я хотел бы знать, как определить, нажата ли клавиша (например, p для паузы и s для остановки), и мне не хотелось бы, чтобы это было что-то вроде raw_input, что ждет ввода пользователя перед продолжением выполнения. Кто-нибудь знает, как это сделать в цикле while?

Кроме того, я хотел бы сделать эту кросс-платформу, но если это невозможно, то моей основной целью разработки является linux

ОТВЕТЫ

Ответ 1

В Python есть модуль клавиатуры со множеством функций. Установите его, возможно, с помощью этой команды:

Затем используйте его в коде, например:

Ответ 2

Для тех, кто на окнах и изо всех сил пытался найти рабочий ответ здесь мой: pynput

Приведенная выше функция будет печатать любую нажатую клавишу, а также запускать действие при отпускании клавиши "esc". Документация клавиатуры здесь для более разнообразного использования.

Маркус фон Броади выделил потенциальную проблему, которая заключается в следующем: этот ответ не требует, чтобы вы находились в текущем окне, чтобы этот сценарий был активирован, решение для окон будет следующим:

Ответ 3

В качестве OP упомяните о raw_input - это означает, что он хочет получить решение. Linux: curses - это то, что вам нужно (Windows PDCurses). Curses, графический API для Cli Software, вы можете достичь большего, чем просто обнаруживать ключевые события.

Этот код будет обнаруживать клавиши до тех пор, пока не будет нажата новая строка.

Ответ 4

Для Windows вы можете использовать msvcrt следующим образом:

Ответ 5

Используйте PyGame, чтобы иметь окно, а затем вы можете получить ключевые события.

Для письма p :

Ответ 6

Используйте этот код, чтобы найти, какая клавиша нажата

Ответ 7

С модулем keyboard можно сделать больше вещей.

Вот некоторые из методов:

Способ № 1:

Использование функции read_key() :

Это нарушит цикл при нажатии клавиши p .

Способ № 2:

Использование функции wait :

Он будет ждать, пока вы нажмете p и продолжите ввод кода.

Метод № 3:

Использование функции on_press_key :

Нужна функция обратного вызова. Я использовал _ , потому что функция клавиатуры возвращает событие клавиатуры этой функции.

После выполнения он будет запускать функцию при нажатии клавиши. Вы можете остановить все хуки, запустив эту строку:

Способ № 4:

Этот метод вроде как уже ответил user8167727, но я не согласен с кодом, который они сделали. Он будет использовать функцию is_pressed , но другим способом:

Это прервет цикл при нажатии p .

Примечания:

  • keyboard будет читать нажатия клавиш из всей ОС.
  • keyboard требует root на linux

Ответ 8

Я бы предложил вам использовать PyGame и добавить дескриптор события.

Ответ 9

Так что я сделал это.. вид игры.. на основе этого поста (используя библиотеку msvcr и Python 3.7).

Ниже приводится "основная функция" игры, которая заключается в обнаружении нажатых клавиш:

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

(примечание: секретное нажатие клавиши: Ctrl + F12 )

Я надеюсь, что вы можете служить примером и помощью для тех, кто приходит, чтобы ознакомиться с этой информацией.

Ответ 10

Нельзя было бы использовать tKinter или какой-либо другой графический интерфейс (например, wxPython или pyQT) для реализации прослушивателя или другого интерфейса для обнаружения нажатия клавиши.

Итак, как говорится в названии, мне нужен правильный код, чтобы закрыть мой скрипт python. До сих пор я использовал input('Press Any Key To Exit') , но что это делает, так это генерирует ошибку. Мне нужен код, который просто закрывает ваш скрипт без использования ошибки.

У кого-нибудь есть идея? Google дает мне возможность ввода, но я этого не хочу Он закрывается с помощью этой ошибки:

У меня есть DOS batch file, который показывает некоторые результаты на консоли cmd. Я хочу, чтобы пользователи нажимали Enter для запуска программы или любую другую клавишу на клавиатуре для выхода. Я не хочу использовать опции/варианты выбора, потому что в этом случае пользователю придется ввести.

Я пишу пакетный сценарий. После этапа в командном окне он говорит: нажмите любую клавишу, чтобы продолжить, и останавливается, а после того, как что-то нажато, сценарий продолжается. Как я могу предотвратить это в сценарии?

Если вы находитесь на windows, то команда cmd pause должна работать, хотя она гласит: "нажмите любую клавишу, чтобы продолжить".

Альтернативой linux является read , хорошее описание можно найти здесь

Вы пробовали raw_input() ? Возможно, вы получаете синтаксическую ошибку, используя input() на python 2.x, который попытается eval , что бы он ни получил.

Я бы не рекомендовал использовать функции, специфичные для платформы в python, если вы можете их избежать, но вы можете использовать встроенный модуль msvcrt .

Установите с pip install py-getch и используйте его следующим образом:

Для удобства он также поставляется с вариантом, который вызывает sys.exit(status) за один шаг:

Вот способ закончить, нажав любую клавишу на *nix, без отображения клавиши и без нажатия кнопки возврата . (Заслуга общего метода заключается в том, что Python считывает один символ от пользователя .) Из SO, похоже, что вы могли бы использовать модуль msvcrt для дублирования этой функции на Windows, но у меня нет его нигде для тестирования. Слишком много комментариев, чтобы объяснить, что происходит.

Я делаю заявку на учебу и хотел бы использовать функцию нажмите любую клавишу, чтобы продолжить на стартовом экране. Поэтому, когда кто-то нажимает клавишу, он открывает следующую форму. Кто-нибудь может мне помочь? Заранее спасибо! Код до сих пор: //SOME ACTION// < Form2 f2 = new Form2();.

Хорошо, я нахожусь на Linux Mint 17.1 "Rebecca", и я, кажется, понял это, как вы, возможно, знаете, Linux Mint поставляется с установленным Python, вы не можете обновить его и не можете установить другую версию поверх него. Я узнал, что python, предустановленный в Linux Mint, имеет версию 2.7.6, поэтому следующее наверняка будет работать с версией 2.7.6. Если вы добавите raw_input('Press any key to exit') , он не будет отображать никаких кодов ошибок, но сообщит вам, что программа вышла с кодом 0. Например, это моя первая программа. MyFirstProgram . Имейте в виду, что это моя первая программа, и я знаю, что она отстой, но это хороший пример того, как использовать "Press any key to Exit" Кстати, это также мой первый пост на этом сайте, так что извините, если я неправильно отформатировал его.

Насколько я знаю, нет никакого способа "нажать любую клавишу". Команды input и raw_input требуют, чтобы вы нажали клавишу ENTER. (raw_input не поддерживается в Python 3.x)

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

У меня есть сторонние образцы кода SDK, написанные на C++ (консольные приложения). Когда я запускаю любой из них с Visual Studio 2010 (запуск без отладки), он не печатает нажмите любую клавишу.

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

У меня есть DOS batch file, который показывает некоторые результаты на консоли cmd. Я хочу, чтобы пользователи нажимали Enter для запуска программы или любую другую клавишу на клавиатуре для выхода.

Я пишу пакетный сценарий. После этапа в командном окне он говорит: нажмите любую клавишу, чтобы продолжить, и останавливается, а после того, как что-то нажато, сценарий продолжается. Как я могу.

Я делаю заявку на учебу и хотел бы использовать функцию нажмите любую клавишу, чтобы продолжить на стартовом экране. Поэтому, когда кто-то нажимает клавишу, он открывает следующую форму. Кто-нибудь.

Когда пользователь вводит 3, я хочу, чтобы программа вышла, но вместо этого консоль говорит, что нажмите любую клавишу, чтобы продолжить, а затем выходит после того, как пользователь нажмет любую.

Снимок экрана ошибки кода Я думаю, что эта проблема может быть связана с чем-то связанным с Terminal или Visual Studio Code. Я не уверен. (Только что начал изучать python). Я также делаю это на Mac.

Большинство обычных отладчиков Python поддерживает только отладку кода Python. Однако на практике Python используется совместно с C или C++ в сценариях, для которых требуется высокая производительность или возможность напрямую вызывать API-интерфейсы платформ. (См. пошаговое руководство в статье Создание расширения C++ для Python.)

Visual Studio поддерживает встроенные функции отладки в смешанном режиме одновременно для Python и встроенного кода C/C++. Чтобы использовать их, выберите параметр Собственные средства разработки Python для рабочей нагрузки Разработка на Python в установщике Visual Studio.

Смешанный режим отладки не доступен в Инструментах Python для Visual Studio 1.x в Visual Studio 2015 и более ранних версий.

Отладка в смешанном режиме включает следующие компоненты, описанные в этой статье:

  • объединенный стек вызовов;
  • переход между кодом Python и машинным кодом;
  • точки останова в обоих типах кода;
  • просмотр представлений Python для объектов во фреймах машинного кода и наоборот;
  • Отладка в контексте проекта Python или проекта C++

Смешанный режим отладки для Python в Visual Studio

Включение отладки в смешанном режиме в проекте Python

Щелкните проект Python правой кнопкой мыши в обозревателе решений, выберите пункт Свойства, откройте вкладку Отладка и выберите параметр Включить отладку машинного кода. Этот параметр включает смешанный режим для всех сеансов отладки.

Включение отладки машинного кода

При присоединении отладчика смешанного режима к существующему процессу (Отладка > Присоединить к процессу) нажмите кнопку Выбрать, чтобы открыть диалоговое окно Выбор типа кода. Выберите параметр Выполнять отладку кода следующих типов, затем выберите в списке Машинный код и Python:

Выбор типов кода Python и машинного кода

Параметры типа кода являются постоянными, поэтому, если позже вам понадобится отключить отладку в смешанном режиме при присоединении к другому процессу, очистите тип кода Python.

Можно выбрать другие типы кода в дополнение к машинному коду или вместо него. Например, если CPython размещается в управляемом приложении, которое, в свою очередь, использует собственные модули расширения, и необходимо выполнить отладку всех трех компонентов, можно одновременно выбрать Python, Машинный код и Управляемый код для единой отладки, в том числе использования объединенных стеков вызовов и переключения между всеми тремя средами выполнения.

Когда вы впервые приступите к отладке в смешанном режиме, может отобразиться диалоговое окно Необходимые символы Python. См. статью Символы для отладки в смешанном режиме. Символы для любой среды Python необходимо установить только один раз. Символы включаются автоматически при установке поддержки Python с помощью Visual Studio Installer (Visual Studio 2017 и более поздних версий).

Включение отладки в смешанном режиме в проекте C/C++

В обозревателе решений щелкните проект C/C++ правой кнопкой мыши и выберите пункт Свойства.

Перейдите на вкладку Отладка и в качестве загружаемого отладчика выберите Отладка Python и машинного кода, после чего нажмите кнопку ОК.

Выбор

Если у вас нет возможности выбрать параметр Отладка Python и в машинном коде, необходимо сначала установить собственные средства разработки Python с помощью Visual Studio Installer. Его можно найти в качестве параметра в рабочей нагрузке разработки Python. Дополнительные сведения см. в статье о добавлении поддержки Python в Visual Studio на платформе Windows.

При использовании этого метода учитывайте, что вы не можете отлаживать само средство запуска py.exe, так как оно порождает дочерний процесс python.exe, к которому отладчик привязан не будет. Если вы хотите напрямую запускать python.exe с аргументами, в свойствах отладки Python и машинного кода (см. изображение выше) в параметре Команда укажите полный путь к python.exe, а затем укажите аргументы в параметре Аргументы команды.

Подключение отладчика смешанного режима

Во всех предыдущих версиях Visual Studio непосредственная отладка в смешанном режиме возможна только при запуске проекта Python в Visual Studio, так как проекты C/C++ используют только отладчик машинного кода. Но вы можете подключить отладчик отдельно.

Запустите проект C++ без отладки (выберите Отладка > Запуск без отладки или нажмите клавиши CTRL+F5).

Выберите Отладка > Присоединение к процессу. В открывшемся диалоговом окне выберите соответствующий процесс, затем нажмите кнопку Выбрать, чтобы открыть диалоговое окно Выбор типа кода, в котором можно выбрать Python:

Выбор Python в качестве типа отладки при подсоединении отладчика

Нажмите ОК, чтобы закрыть диалоговое окно, затем нажмите Присоединить для запуска отладчика.

Может потребоваться добавить соответствующую паузу или задержку в приложение C++, чтобы это приложение не вызывало код Python, отладку которого необходимо выполнить, пока вы не сможете присоединить отладчик.

Функции, характерные для смешанного режима

Объединенный стек вызовов

В окне стека вызовов представлены чередующиеся кадры стеков машинного кода и Python с помеченными переходами.

Объединенный стек вызовов с отладкой в смешанном режиме

Переходы отображаются в виде внешнего кода без указания направления перехода, если задан параметр Инструменты > Параметры > Отладка > Общие > Включить только мой код.

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

переход между кодом Python и машинным кодом;

При использовании команд Шаг с заходом (F11) или Шаг с выходом (SHIFT+F11) отладчик в смешанном режиме правильно обрабатывает изменения типов кода. Например, когда Python вызывает метод типа, который реализован на языке C, переход с заходом в вызов этого метода останавливается в начале собственной функции, реализующей метод. Аналогичным образом, когда машинный код вызывает функцию API Python, вызывается код Python. Например, шаг с заходом в PyObject_CallObject значения функции, которая была изначально определена на языке Python, остановится в начале функции Python. Шаг с заходом из Python в машинный код также поддерживается для функций машинного кода, которые вызываются из Python с помощью модуля ctypes.

Представление значений PyObject в машинном коде

Если кадр машинного кода (C или C++) активен, его локальные переменные отображаются в окне локальных переменных отладчика. В собственных модулях расширения Python многие из переменных относятся к типу PyObject (который является typedef для _object ) или к другим базовым типам Python (см. список ниже). При отладке в смешанном режиме эти значения представляют дополнительный дочерний узел с меткой [Представление Python] . При развертывании этот узел отображает представление переменной Python, как и в случае, когда локальная переменная, которая ссылается на тот же объект, присутствует в кадре Python. Дочерние узлы данного узла можно изменять.

Представление Python в окне

Чтобы отключить эту функцию, щелкните правой кнопкой мыши в любом месте в окне локальных переменных и снимите флажок Python > Показать узлы представлений Python:

Включение представления Python в окне

Типы C, для которых отображаются узлы представления Python (если включено):

  • PyObject
  • PyVarObject
  • PyTypeObject
  • PyByteArrayObject
  • PyBytesObject
  • PyTupleObject
  • PyListObject
  • PyDictObject
  • PySetObject
  • PyIntObject
  • PyLongObject
  • PyFloatObject
  • PyStringObject
  • PyUnicodeObject

Для типов, которые вы создаете самостоятельно, представление Python не отображается автоматически. При создании расширений для Python 3.x обычно это не проблема, так как любой объект в конечном итоге имеет поле ob_base одного из типов, перечисленных выше, вследствие чего отображается представление Python.

Для Python 2.x каждый тип объектов обычно объявляет заголовок как коллекцию встроенных полей. При этом отсутствует связь между создаваемыми пользовательскими типами и PyObject на уровне системы типов в коде C или C++. Чтобы включить узлы представления Python для таких пользовательских типов, измените файл PythonDkm.natvis в каталоге установки инструментов Python и добавьте другой элемент в код XML для структуры C или класса C++.

В качестве альтернативного (и лучшего) варианта можно следовать PEP 3123 и использовать явное поле PyObject ob_base; вместо PyObject_HEAD , хотя это может привести к проблемам с обратной совместимостью.

Представление значений машинного кода в коде Python

Как и в предыдущем разделе, можно включить представление C++ для значений машинного кода в окне локальных переменных при активном кадре Python. Эта функция отключена по умолчанию. Чтобы включить ее, щелкните правой кнопкой мыши в окне локальных значений и установите флажок Python > Показать узлы представлений C++.

Включение представления C++ в окне

Узел представления C++ отображает базовую структуру C/C++ для значения, идентичную той, которую вы видите в кадре машинного кода. Например, он отображает экземпляр _longobject (для которого PyLongObject является определением типа typedef) для длинного целого числа Python и пытается определить типы собственных классов, созданных вручную. Дочерние узлы данного узла можно изменять.

Представление C++ в окне

Если дочернее поле объекта имеет тип PyObject или один из других поддерживаемых типов, он имеет узел представления Python (если включено), что позволяет перемещаться по графам объекта, где ссылки не предоставляются непосредственно в Python.

В отличие от узлов представления Python, использующих метаданные объекта Python для определения типа объекта, такого же надежного механизма для представления C++ не существует. В сущности, для заданного значения Python (для ссылки PyObject ) невозможно точно определить резервную структуру C/C++. Отладчик смешанного режима пытается угадать этот тип, просматривая различные поля типа объекта (например, на PyTypeObject ссылается его поле ob_type ), которые имеют типы указателей функций. Если один из этих указателей ссылается на функцию, которая может быть разрешена, а функция имеет параметр self с типом, более точным, чем PyObject* , тогда предполагается, что этот тип является резервным. Например, если ob_type->tp_init данного объекта указывает на следующую функцию:

То отладчик может правильно предположить, что типом C объекта является FobObject . Если исходя из tp_init не удается определить тип более точно, отладчик переходит к другим полям. Если не удается определить тип на основе любого из этих полей, узел представления C++ представляет объект как экземпляр PyObject .

Чтобы всегда получать полезное представление пользовательских типов, рекомендуется зарегистрировать по меньшей мере одну специальную функцию при регистрации типа и использовать строго типизированный параметр self . Большинство типов соответствует этому требованию естественным образом. Если это не так, для этой цели обычно лучше всего использовать запись tp_init . Фиктивная реализация tp_init для типа, которая присутствует только для того, чтобы определить тип отладки, сразу же возвращает ноль, как в приведенном выше примере.

Отличия от стандартной отладки Python

Отладчик смешанного режима отличается от стандартного отладчика Python тем, что в нем представлены некоторые дополнительные функции, но отсутствуют определенные возможности, связанные с Python.

  • Неподдерживаемые функции: условные точки останова, интерактивное окно отладки и удаленная отладка между различными платформами.
  • Окно интерпретации: доступно, но с ограниченным набором функциональных возможностей, включая все перечисленные здесь ограничения.
  • Поддерживаемые версии Python: только CPython 2.7 и 3.3+.
  • Оболочка Visual Studio. При использовании Python с оболочкой Visual Studio (например, при выполнении установки с помощью интегрированного средства установки) в Visual Studio не откроются проекты C++, а редактирование файлов C++ будет ограничено возможностями простого текстового редактора. В оболочке полностью поддерживается отладка C/C++ и отладка в смешанном режиме, что позволяет работать с исходным кодом, переходить к машинному коду и вычислять выражения C++ в окнах отладчика.
  • Просмотр и развертывание объектов: при просмотре объектов Python в окнах локальных и контрольных значений отладчика смешанного режима будет отображаться только структура объектов. Свойства не вычисляются автоматически, и вычисляемые атрибуты не отображаются. Для коллекций будут отображаться только элементы встроенных типов ( tuple , list , dict , set ). Пользовательские коллекции не визуализируются в виде коллекций, если они наследуются от коллекции встроенного типа.
  • Вычисление выражений: см. сведения ниже.

Вычисление выражения

Стандартный отладчик Python позволяет вычислять произвольные выражения Python в окнах контрольных значений и интерпретации отладчика при приостановке отладки в любой точке кода, если она не заблокирована с помощью операции ввода-вывода или другого аналогичного системного вызова. В смешанном режиме отладки произвольные выражения можно вычислить только при остановке в коде Python после точки останова или при шаге с заходом в код. Выражения можно вычислить только в потоке, где были выполнены вышеуказанные операции.

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

Отладчик смешанного режима разрешает такие выражения по-разному. Все операции доступа к элементам ищут только поля, которые непосредственно принадлежат объекту (например, запись в его __dict__ или __slots__ либо поле собственной структуры, которое предоставляется Python с помощью tp_members ), и игнорируют методы __getattr__ , __getattribute__ или логику дескриптора. Аналогичным образом все операции индексирования игнорируют __getitem__ и получают доступ к внутренним структурам данных коллекций напрямую.

Для обеспечения согласованности такая схема разрешения используется для всех выражений, которые соответствуют ограничениям вычисления выражений вне зависимости от того, разрешены ли произвольные выражения в текущей точке остановки. Чтобы обеспечить правильную семантику Python, когда доступен полнофункциональный вычислитель, заключите выражение в скобки.

Читайте также: