Как вы заставляете Python ждать, чтобы вы могли прочитать вывод? - PullRequest
2 голосов
/ 01 марта 2010

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

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

( Приношу свои извинения, если этот вопрос глупый, но я очень новичок в Python и программировании в целом. )

Ответы [ 4 ]

3 голосов
/ 02 марта 2010

Если вы не хотите использовать raw_input() или input(), вы можете записать свой вывод (stdout, stderr) в файл или файлы.

Вы можете использовать модуль logging или просто перенаправить sys.stdout и sys.stderr.

Я бы предложил использовать комбинацию logging и traceback, если вы хотите регистрировать ошибки с их стеком трассировки.

Нечто подобное может быть:

import logging, traceback
logging.basicConfig(filename=r'C:\Temp\log.txt', level=logging.DEBUG)

try:
    #do some stuff
    logging.debug('I did some stuff!')
except SomeException:
    logging.error(traceback.format_exc())

Вот пример перенаправления stdout и stderr:

if __name__ == '__main__':
    save_out = sys.stdout  # save the original stdout so you can put it back later
    out_file = open(r'C:\Temp\out.txt', 'w')
    sys.stdout = out_file

    save_err = sys.stderr
    err_file = open(r'C:\Temp\err.txt', 'w')
    sys.stderr = err_file

    main()  #call your main function

    sys.stdout = save_out  # set stdout back to it's original object
    sys.stderr = save_err

    out_file.close()
    err_file.close()

Я хочу указать, что это не самый простой и прямой путь.

3 голосов
/ 01 марта 2010

Это «проблема» с Notepad2, а не с самим Python.

Если вы не хотите использовать input () / sleep (или любую другую функцию блокировки) в ваших скриптах, я думаю, что вам нужно обратиться к настройкам в Notepad2 и посмотреть, что это может предложить.

3 голосов
/ 01 марта 2010

вы можете начать в командном окне. e.g.:

c:\tmp\python>main.py

добавление raw_input() (или input() в py3k) в конце вашего скрипта позволит вам заморозить до тех пор, пока не будет нажата кнопка ввода, но это не очень хорошая вещь.

0 голосов
/ 01 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...