Меню

Python не закрывать консоль при ошибке

У вас может быть второй скрипт, который импортирует / запускает ваш основной код. Этот скрипт перехватит все исключения и распечатает трассировку (затем дождитесь ввода пользователя перед завершением)

Предполагая, что ваш код структурирован с использованием if __name__ == "__main__": main() идиома ..

def myfunction():
    pass

class Myclass():
    pass

def main():
    c = Myclass()
    myfunction(c)

if __name__ == "__main__":
    main()

..и файл называется «myscriptname.py» (очевидно, что его можно изменить), следующее будет работать

from myscriptname import main as myscript_main

try:
    myscript_main()
except Exception, errormsg:
    print "Script errored!"
    print "Error message: %s" % errormsg
    print "Traceback:"
    import traceback
    traceback.print_exc()
    print "Press return to exit.."
    raw_input()

(Обратите внимание, что raw_input() был заменен input() in Python 3)

Если у вас нет main() функцию, вы должны использовать оператор импорта в try: Блок:

try:
    import myscriptname
except [...]

Лучшее решение, которое не требует дополнительных сценариев-оболочек, — запустить сценарий либо из IDLE, либо из командной строки.

В Windows перейдите в Пуск> Выполнить, введите cmd и войдите. Затем введите что-нибудь вроде ..

cd "PathTo Your Script"
Pythonbinpython.exe myscriptname.py

(Если вы установили Python в C:Python)

В Linux / Mac OS X это немного проще, вы просто запускаете cd /home/your/script/ становятся python myscriptname.py

Самый простой способ — использовать IDLE, запустить IDLE, открыть скрипт и нажать кнопку запуска (F5 or Ctrl+F5 Думаю). Когда скрипт завершает работу, окно не закрывается автоматически, поэтому вы можете видеть любые ошибки.

Также как Крис Торнхилл Предлагается, в Windows вы можете создать ярлык для своего скрипта, а в его свойствах префикс цели с помощью ..

C:WINDOWSsystem32cmd.exe /K [existing command]

от http://www.computerhope.com/cmd.htm:

/K command - Executes the specified command and continues running.

Уведомления

  • Начало
  • » Python для новичков
  • » Python: консоль исчезает сразу после выполнения

#1 Ноя. 20, 2011 15:12:44

Python: консоль исчезает сразу после выполнения

Пишу небольшие консольные программы на Python’e. Но после вывода данных при помощи print консоль сразу закрывается, и я даже неуспеваю увидеть результат. Что дописать в скрипте чтоб консоль не закрывалась, или хотябы закрывалась через некоторое время?

Офлайн

  • Пожаловаться

#2 Ноя. 20, 2011 15:22:38

Python: консоль исчезает сразу после выполнения

Офлайн

  • Пожаловаться

#3 Ноя. 20, 2011 15:38:07

Python: консоль исчезает сразу после выполнения

Punk_Joker
Пишу небольшие консольные программы на Python’e. Но после вывода данных при помощи print консоль сразу закрывается, и я даже неуспеваю увидеть результат. Что дописать в скрипте чтоб консоль не закрывалась, или хотябы закрывалась через некоторое время?

Просто открой консоль (CMD в Windows или Terminal в UNIX) в той папке, где у тебя есть скрипт.
Напиши в консоли python <название скрипта>.py. И после выполения программы консоль никуда не пропадёт.

Офлайн

  • Пожаловаться

#4 Ноя. 20, 2011 23:24:19

Python: консоль исчезает сразу после выполнения

Spectral
Просто открой консоль (CMD в Windows или Terminal в UNIX) в той папке, где у тебя есть скрипт.
Напиши в консоли python <название скрипта>.py. И после выполения программы консоль никуда не пропадёт.

можно создать ярлык для cmd.exe, удалив в его свойствах путь к system32
тогда он будет открывать в той папке, где находится
иногда удобнее raw_input()/input()

tags: cmd.exe

Отредактировано py.user.next (Сен. 8, 2022 01:16:02)

Онлайн

  • Пожаловаться

#5 Дек. 2, 2011 20:57:31

Python: консоль исчезает сразу после выполнения

Punk_Joker
Пишу небольшие консольные программы на Python’e. Но после вывода данных при помощи print консоль сразу закрывается, и я даже неуспеваю увидеть результат. Что дописать в скрипте чтоб консоль не закрывалась, или хотябы закрывалась через некоторое время?

ну если приложение совсем уж простое то можно помимо raw_input() сделать например так:

cod@coder-desktop ~ $ nano ololo.py

cod@coder-desktop ~ $ python ololo.py > olololo
cod@coder-desktop ~ $ cat ololo
ololo
cod@coder-desktop ~ $

ну это как вариант конечно =) ну и в том случае если у тебя *nix
но raw_input() все= както прощще =)

Офлайн

  • Пожаловаться

#6 Дек. 3, 2011 09:31:29

Python: консоль исчезает сразу после выполнения

ololo не поможет, вопрос касается уиндоус (когда щёлкаешь на скрипте, запуская его)
в лине то такой проблемы нет

Отредактировано (Дек. 3, 2011 09:32:56)

Онлайн

  • Пожаловаться

#7 Июль 13, 2021 16:48:09

Python: консоль исчезает сразу после выполнения

Здравствуйте!
Начала изучать Питон. Сделала первую программку, файл.ру
Хочу открыть этот файл, но он моментально закрывается. Можно ли сделать, чтобы этот файл не закрывался?

Прикреплённый файлы:
attachment Первая программа для Владика..py (411 байт)

Офлайн

  • Пожаловаться

#8 Июль 19, 2021 21:17:19

Python: консоль исчезает сразу после выполнения

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

и она не закроется пока ты что нибудь не введешь

Офлайн

  • Пожаловаться

  • Начало
  • » Python для новичков
  • » Python: консоль исчезает сразу после выполнения

101 / 53 / 21

Регистрация: 20.12.2009

Сообщений: 1,124

1

Как сделать, чтобы приложение не закрывалось при ошибке?

01.09.2020, 13:49. Показов 1779. Ответов 7


консольное приложение собранное с помощью pyinstaller иногда крашится, ошибку не успеваю прочитать.
как сделать чтобы не закрывалось при ошибке?



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

01.09.2020, 13:49

7

260 / 165 / 54

Регистрация: 03.05.2019

Сообщений: 339

01.09.2020, 14:06

2

Через IDE пробовали смотреть? Например, Visual Studio Code.
И код при возможности скиньте.



0



Эксперт Python

295 / 108 / 57

Регистрация: 07.12.2016

Сообщений: 209

01.09.2020, 14:21

3

Supersumestria, запускайте скрипт из консоли. В конце допишите pause при запуске. Тогда не будет консоль закрываться



0



Supersumestria

101 / 53 / 21

Регистрация: 20.12.2009

Сообщений: 1,124

01.09.2020, 14:55

 [ТС]

4

Цитата
Сообщение от amator_C
Посмотреть сообщение

код при возможности скиньте.

вот

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
def getInfo(adr):
    firsturl = "https://api.etherscan.io/api?module=account&action=txlist&address="+adr+"&sort=desc&apikey="+apikey
    first_look = not os.path.isfile('./logs/'+adr)
    if first_look:
        f = open("./logs/" + adr, "w")
    response = requests.get(firsturl)
    dec_content = response.json()
    result = dec_content.get("result")
    #print(dec_content.get("message"))
    if dec_content.get("status")==0:
        print('invalid adress')
    #pprint(dec_content)
    if dec_content.get("message")=='OK':
        for i,transaction in enumerate(result):
            converted = dt.datetime.fromtimestamp(int(transaction['timeStamp']))
            cvtime=converted.strftime('%Y-%m-%d %H:%M:%S')
            today = dt.datetime.today()
            if i==0:
                if first_look:
                    f = open("./logs/"+adr, "w")
                    f.write(transaction['blockNumber'])
                    f.close()
                    print(f'this is first check for adress {adr}')
                    print(cvtime)
                else:
                    f = open("./logs/" + adr, "r")
                    stored_block = f.readline()
                    if len(stored_block)<1:
                        print('stored block is empty')
                        f = open("./logs/" + adr, "w")
                        f.write(transaction['blockNumber'])
                        f.close()
                    if transaction['blockNumber']!=stored_block:
                        bnumberstr=transaction['blockNumber']
                        bot.send_message('1104108321', f'new transact {cvtime} {adr} {bnumberstr}')
                        bot.send_message('1111375551', f'new transact {cvtime} {adr} {bnumberstr}')
                        f = open("./logs/" + adr, "w")
                        f.write(transaction['blockNumber'])
                        f.close()
def check_all():
    for line in adresses:
        getInfo(line.rstrip("n"))
print(f'start to monitoring {len(adresses)} adreses')
while 1:
    check_all()



0



Эксперт Python

4606 / 2027 / 359

Регистрация: 17.03.2012

Сообщений: 10,081

Записей в блоге: 6

01.09.2020, 15:45

5

Supersumestria, tryexcept?



0



Эксперт Python

5403 / 3827 / 1214

Регистрация: 28.10.2013

Сообщений: 9,554

Записей в блоге: 1

01.09.2020, 16:04

6

Supersumestria,
Зачем ты запихал в одну функцию все подряд?
Почему не используешь менеджеры контекста для файлов?
Почему не проверяешь возврат requests.get?
Почему ты решил, что бесконечный циклс постоянными запросами без пауз это нормально?
Ты когда-нибудь слышал про обработку ошибок?

И последнее: зачем все это ты решил засунуть в pyinstaller архив?



1



Модератор

Эксперт Python

2322 / 1388 / 473

Регистрация: 21.02.2017

Сообщений: 3,816

Записей в блоге: 1

01.09.2020, 16:20

7

Garry Galler, я предполагаю что скорее всего он пытается проверить кошельки и опустошить их.



0



Supersumestria

101 / 53 / 21

Регистрация: 20.12.2009

Сообщений: 1,124

01.09.2020, 18:23

 [ТС]

8

Немного переписал

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
   response = requests.get(firsturl)
    if  response.status_code == requests.codes.ok:
        dec_content = response.json()
        result = dec_content.get("result")
        if dec_content.get("message")=='OK':
            for i,transaction in enumerate(result):
                converted = dt.datetime.fromtimestamp(int(transaction['timeStamp']))
                cvtime=converted.strftime('%Y-%m-%d %H:%M:%S')
                if i==0:
                    if first_look:
                        with open(curr_file, 'w') as opened_file:
                            opened_file.write(transaction['blockNumber'])
                        print(f'this is first check for adress {adr}')
                    else:
                        f = open(curr_file, "r")
                        stored_block = f.readline()
                        if len(stored_block)<1:
                            print('stored block is empty')
                            with open(curr_file, 'w') as opened_file:
                                opened_file.write(transaction['blockNumber'])
                        if transaction['blockNumber']!=stored_block:
                            bnumberstr=transaction['blockNumber']
                            bot.send_message('1104108321', f'new transact {cvtime} {adr} {bnumberstr}')
                            bot.send_message('1111375551', f'new transact {cvtime} {adr} {bnumberstr}')
                            with open(curr_file, 'w') as opened_file:
                                opened_file.write(transaction['blockNumber'])
def check_all():
    for line in adresses:
        getInfo(line.rstrip("n"))
print(f'start to monitoring {len(adresses)} adreses')
while 1:
    check_all()
    time.sleep(5)

запустил переписаный скрипт больше получаса, пока ошибки нет.
Как мне отследить ошибку которая редко появляется?

возможно проверка

Python
1
if  response.status_code == requests.codes.ok:

помогает, но я не уверен



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

01.09.2020, 18:23

Помогаю со студенческими работами здесь

Как реализовать цикл, чтобы при появлении консоли программа приложение не закрывалось?
Добрый день уважаемые!
Подскажите пожалуйста как реализовать цикл, чтобы при появлении консоли…

Как сделать, чтобы диалоговое окно не закрывалось при нажатии клавиши ENTER?
Как сделать, чтобы диалоговое окно не закрывалось при нажатии клавиши ENTER? (если можно то, код)

Как сделать, чтобы, при закрытии родительского, pop-up окно тоже закрывалось?
открываю через &lt;img scr=’image.gif’ onLoad=’window.open()’&gt;новое pop-up окно. как сделать, чтобы,…

Как сделать, чтобы при нажатии на кнопку открывалось новое QMainWindow и закрывалось текущее
Собственно и весь вопрос:)
Рылся в инете, ничего умнее, чем создать динамический объект нового…

как сделать так, чтобы не просто выводилось сообщение об ошибке, а действие не проделывалось при при вводе значений ни о
Добрый вечер !
как сделать так, чтобы не просто выводилось сообщение об ошибке, а действие не…

Сделать так, чтобы при открытии другого окна, первое автоматически закрывалось
Не так давно начал заниматься веб-разработкой и столкнулся с проблемой, на странице есть…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

8

в python при запуске скриптов есть ли способ остановить закрытие окна консоли после выплевывания обратной трассировки?

8 ответов


Если вы делаете это на ОС Windows, вы можете префикс целевой ярлык с:

C:WINDOWSsystem32cmd.exe /K <command>

это предотвратит закрытие окна при выходе команды.

16

автор: Chris Thornhill


try:
    #do some stuff
    1/0 #stuff that generated the exception
except Exception as ex:
    print ex
    raw_input()

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

def show_exception_and_exit(exc_type, exc_value, tb):
    import traceback
    traceback.print_exception(exc_type, exc_value, tb)
    raw_input("Press key to exit.")
    sys.exit(-1)

 import sys
 sys.excepthook = show_exception_and_exit

это особенно полезно, если у вас есть исключения, возникающие внутри обработчиков событий, которые вызываются из кода C, которые часто не распространяют ошибки.


у вас может быть второй скрипт, который импортирует/запускает ваш основной код. Этот скрипт поймает все исключения и распечатает трассировку (затем дождитесь ввода пользователя перед завершением)

предполагая, что ваш код структурирован с помощью if __name__ == "__main__": main() идиома..

def myfunction():
    pass

class Myclass():
    pass

def main():
    c = Myclass()
    myfunction(c)

if __name__ == "__main__":
    main()

..и файл называется …myscriptname.py » (очевидно, что это можно изменить), следующее будет работать

from myscriptname import main as myscript_main

try:
    myscript_main()
except Exception, errormsg:
    print "Script errored!"
    print "Error message: %s" % errormsg
    print "Traceback:"
    import traceback
    traceback.print_exc()
    print "Press return to exit.."
    raw_input()

(обратите внимание, что raw_input() был заменен на input() на Python 3)

если у вас нет main() функция, вы использовали бы положить оператор импорта в try: блок:

try:
    import myscriptname
except [...]

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

в Windows выберите Пуск > Выполнить, введите cmd и введите. Затем введите что-то вроде..

cd "PathTo Your Script"
Pythonbinpython.exe myscriptname.py

(если вы установили Python в C:Python)

на Linux / Mac OS X это немного проще, вы просто запустите cd /home/your/script/ затем python myscriptname.py

самый простой способ — использовать IDLE, запустить IDLE, открыть скрипт и нажать кнопку run (F5 или Ctrl+F5 я думаю). При выходе скрипта окно не закроется автоматически, поэтому вы можете увидеть любые ошибки

также, как Крис Торнхилл предложил, в Windows, вы можете создать ярлык для вашего скрипта, и в его свойствах префикс цели с..

C:WINDOWSsystem32cmd.exe /K [existing command]

от http://www.computerhope.com/cmd.htm:

/K command - Executes the specified command and continues running.

в системах UNIX (Windows уже была рассмотрена выше…) вы можете изменить аргумент интерпретатора, чтобы включить флаг-i:

#!/ usr / bin / python-i

из man-страницы:

когда скрипт передается в качестве первого аргумента или используется параметр-c, после выполнения скрипта или команды войдите в интерактивный режим. Он не читает файл $PYTHONSTARTUP. Это может быть полезно для проверки глобальных переменных или в стеке трассировка, когда сценарий вызывает исключение.


в windows вместо двойного щелчка по файлу py вы можете перетащить его в уже открытое окно CMD, а затем нажать enter. Он остается открытым после исключения.

Дэн


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

вам нужно изменить приложение python, чтобы поймать исключение и распечатать его, не выходя из интерпретатора. Один из способов сделать это-напечатать «нажмите ENTER для выхода», а затем прочитать некоторые входные данные из окна консоли, фактически ожидая, пока пользователь нажмет Enter.


Если вы используете Windows, вы можете сделать это

    import os

    #code here 

    os.system('pause')

Python: как предотвратить закрытие окна CMD

Я новичок в Python .. Я использовал код

x = input(' Hey what is your name ' ) print(' Hey, ' + x) input(' press close to exit ') 

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

Я использую python 3.3

  • вы можете либо запустить скрипт через платформу ожидания питонов, чтобы он не «закрылся», либо вы можете открыть командную строку (cmd), а затем запустить свой скрипт оттуда, он не будет «закрываться»
  • Я не уверен, что вы ищете. делает python -i script.py делай что хочешь? Какая командная строка закрывается? Командная строка python или оболочка, через которую вы запускаете python?
  • гм, я думаю, что знаю проблему: вы даете ввод после второго оператора «input»? цель входной команды — зависнуть («оставаться там и не закрываться»), пока пользователь не нажмет клавишу. если вы дадите ввод, он закрывается.
  • Нет, я даю первый ввод, а затем вторую строку, я прошу python напечатать его … затем я снова прошу python для ввода, чтобы он оставался там .. Он отлично работает в режиме ожидания, но не на cmd

В Windows закрывается консоль CMD, потому что процесс Python существует в конце.

Чтобы предотвратить это, сначала откройте консоль, а затем используйте командную строку для запуска вашего скрипта. Сделайте это, щелкнув правой кнопкой мыши папку, содержащую скрипт, выберите Open console here и набрав python scriptname.py в консоли.

Альтернативой, как вы выяснили, является откладывать сценарий заканчивается добавлением input() звоните в конце. Это позволяет пользователю сценария выбирать, когда сценарий завершится и консоль закроется.

  • 4 Обратите внимание, что вам (по крайней мере, в Windows 7) нужно сдвигать + щелкать правой кнопкой мыши каталог, содержащий ваши исходные файлы, а не сам скрипт.
  • 1 Я тоже пробовал это, но командная строка закрывалась мгновенно даже после добавления ввода
  • @ user1946082: Похоже, вы вместо этого создали ошибку в своем скрипте. An input() call сам по себе не просто завершает Python без ввода.
  • 1 Ну, в моей системе это тоже не дожидается, как и OP. Насколько я понимаю, здесь нет исключений.
  • 1 @martineau: используйте python 3 вместо 2 или используйте raw_input().

Это можно сделать с помощью модуля os. Ниже приведен простой код:

import os os.system('pause') 

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

[edit: Вышеупомянутый метод хорошо работает для ОС Windows. Кажется, проблема с Mac (как указано ihue в комментариях). Дело в том, что библиотека «os» зависит от операционной системы, и некоторые команды могут не работать в одной операционной системе, как они работают в другой].

  • 1 библиотека «os» зависит от операционной системы. Я использую это с окнами, и он отлично работает, потому что на самом деле в cmd есть команда «пауза». Возможно, у Linux есть другой способ добиться этого.
  • Хорошо, спасибо за разъяснения. Я проверю, как это сделать специально на Mac, но вы должны были упомянуть об этом в своем ответе.
  • Правда ihue, я это добавил. Спасибо, что подняли этот вопрос. Пожалуйста, поделитесь своими выводами и для Mac.

Для сред Windows:

Если вы не хотите переходить в командную строку (или работать в среде, где командная строка ограничена), я думаю, что следующее решение — goo. Решение, которое я использую, — создать файл bat.

Используйте блокнот, чтобы создать текстовый файл. В файле содержимое будет выглядеть примерно так:

my_python_program.py pause

Затем сохраните файл как «my_python_program.bat» — НЕ ЗАБУДЬТЕ ВЫБРАТЬ «Все файлы!»

Когда вы запустите файл bat, он запустит программу python и остановится в конце, чтобы вы могли прочитать вывод. Затем, если вы нажмете любую клавишу, это закроет окно.

Tweet

Share

Link

Plus

Send

Send

Pin

Я очень плохо знаком с Python .. Я использовал код

x = input(" Hey what is your name " )       
print(" Hey, " + x)  
input(" press close to exit ")

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

Я использую python 3.3

3 ответа

Лучший ответ

В Windows это консоль CMD, которая закрывается, потому что процесс Python существует в конце.

Чтобы предотвратить это, сначала откройте консоль, а затем используйте командную строку для запуска сценария. Сделайте это, щелкнув правой кнопкой мыши папку, содержащую скрипт, выберите Open console here и введите python scriptname.py в консоли.

Как вы выяснили, альтернативой является отложить сценарий, заканчивающийся добавлением вызова input() в конце. Это позволяет пользователю сценария выбирать, когда сценарий заканчивается и консоль закрывается.


14

Martijn Pieters
3 Янв 2013 в 18:22

Для сред Windows:

Если вы не хотите переходить в командную строку (или работать в среде, где командная строка ограничена), я думаю, что следующее решение — goo. Я использую решение для создания файла bat.

Используйте блокнот для создания текстового файла. В файле содержимое будет выглядеть примерно так:

my_python_program.py
pause

Затем сохраните файл как «my_python_program.bat» — НЕ ЗАБУДЬТЕ ВЫБРАТЬ «Все файлы!

Когда вы запускаете файл bat, он запускает программу python и останавливается в конце, чтобы вы могли прочитать вывод. Затем, если вы нажмете любую клавишу, он закроет окно.


0

Inter Mob
13 Окт 2019 в 15:33

Это можно сделать с помощью модуля os. Ниже приведен простой код:

import os
os.system("pause")

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

[править: вышеуказанный метод хорошо работает для Windows OS. Это похоже на проблему с Mac (как указано в комментариях ihue). Дело в том, что библиотека «os» зависит от операционной системы, и некоторые команды могут не работать с одной операционной системой, как они работают в другой.]


8

Blaze
1 Ноя 2016 в 16:58

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Python логирование всех ошибок
  • Python код ошибки 2503