2009-02-23 2 views
45

Я запускаю сценарии Python из командной строки из панели задач Windows, имея ярлык, указывающий на интерпретатор Python с фактическим скриптом в качестве параметра.Пауза в Python

После обработки сценария интерпретатор завершается, и окно вывода закрывается, что делает невозможным чтение выходных данных скрипта.

Что является самым простым способом сохранить окно интерпретатора открытым до тех пор, пока не будет нажата любая клавиша?

В пакетных файлах можно завершить сценарий с паузой. Самое близкое к этому, что я нашел в python, это raw_input(), что является неоптимальным, потому что для этого требуется нажать клавишу возврата (вместо любой клавиши).

Любые идеи?

ответ

51

Один из способов - оставить в конце raw_input(), чтобы сценарий ожидал, что вы нажмете Enter перед его завершением.

+25

[С Python 3+] (http://stackoverflow.com/questions/954834/easy-how-to-use-raw-input-in-3-1), это изменилось только на 'input()'. – palswim

+15

Это не решение. Я не знаю, почему его выбрал ответчик. Спецификации были «Нажмите любую клавишу, а не только Enter». Это решение работает только с enter. –

+3

@ Wolfpack'08 Хотя я согласен с тем, что этот ответ явно не отвечает на вопрос, следует отметить, что это высоко в списке для поиска в Google «python pause», поэтому по-прежнему полезно иметь этот ответ. – CrazyCasta

4

В Windows вы можете использовать модуль msvcrt.

msvcrt.kbhit() Возвращение верно, если нажатие клавиши ждет, чтобы читать.

msvcrt.getch() Прочитайте нажатие клавиши и верните полученный символ. Ничто не отражается на консоли . Этот вызов будет блокировать , если нажатие клавиши еще не доступно, но не будет ждать нажатия Enter .

Если вы хотите, чтобы работать на Unix-подобных системах вы можете попробовать this solution с помощью termios и fcntl модулей.

13

Там нет необходимости ждать ввода перед закрытием, просто изменить свою команду так:

cmd /K python <script> 

Переключатель /K выполнит команду, которая следует, но оставить окно командного интерпретатора открытым, в отличие от /C , который выполняет и затем закрывается.

+0

Это не поможет в! случай, заданный Берндом: запуск сценария из ярлыка панели задач, если ярлык не будет правильно настроен (это не случай по умолчанию). –

+0

@bgbg: но вся идея заключается в том, что ярлык изменен. –

+0

/K требует завершения cmd через «выход» или закрытие окна с помощью мыши. Это немного больше, чем одно нажатие клавиши :-) – 2009-02-23 13:19:18

7

Один из способов, чтобы оставить raw_input() в конце, так что сценарий ждет, когда вы нажмете ввести до его завершения.

Преимущество использования raw_input() вместо msvcrt. * Материал состоит в том, что первое является частью стандартного Python (то есть абсолютно кросс-платформенного). Это также означает, что окно сценария будет жив после двойного щелчка по иконке файла сценария, без необходимости делать

cmd /K python <script> 
+1

+1: Многие люди могут найти ключ «Ввод» или «Возврат», не допуская больших ошибок. Требование «любого ключа» вместо возврата кажется немного глупым. –

0
import pdb 
pdb.debug() 

Используется для отладки сценария. Должно быть полезно также сломать.

32

Try os.system("pause") - Я использовал его, и это сработало для меня.

Обязательно включите import os в начало вашего скрипта.

8

Самым лучшим вариант: os.system('pause') < - - на самом деле будет отображаться сообщение с сообщением «нажмите любую клавишу, чтобы продолжить», тогда как добавление только raw_input('') не будет печатать сообщение, только курсор будет доступен.

не связан ответить:

os.system("some cmd command") действительно большая команда, как команда может выполнить любую пакетный файл/CMD команды.

+0

Я столкнулся с проблемой 'os.system ('pause')', как вы сказали, и искал этот вопрос. –

-1

Если вы наберете

input("") 

Он будет ждать их, чтобы нажать любую кнопку, то он будет продолжать. Также вы можете поместить текст между кавычками.

2

Да, я знаю, что я отправляю сообщение в старую ветку, но хочу добавить свой голос за , используя input() (3.x и выше).

В дополнение к концу моего сценария .py это действительно предотвращает открытие и немедленное закрытие окна консоли.

Что касается «проблемы» какого ключа нажать, чтобы закрыть его, я (и 1000 других, я уверен) просто использую ввод («Нажмите Enter, чтобы закрыть»).

Спасибо за позволяя мне добавить мои 2 цента стоит :)

.

+0

@ ρяσѕρєяK О чем ты говоришь, мужик? Он говорит прямо там, чтобы использовать 'input', о котором спрашивал OP. Однако нужно переписывать и избавляться от болтливого стиля. – Superbest

1

На окнах 10 Вкладыш в beggining это:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

Странно, но это работает для меня (вместе с входным сигналом() в конце, конечно)

Смежные вопросы