Как сохранить окно вывода скрипта Python открытым?


193

Я только начал с Python. Когда я выполняю файл скрипта python в Windows, окно вывода появляется, но мгновенно исчезает. Мне нужно, чтобы остаться там, чтобы я мог проанализировать свои результаты. Как я могу держать это открытым?


6
Запоздалый +1000. Я использую python в качестве обучающего языка для друга, который использует Windows, и я не мог поверить, насколько сложно (по крайней мере, на основе существующей документации) добраться до места, где мы могли бы запустить скрипт и посмотреть результат.
Каскабель

2
просто перетащите ваш скрипт в окно cmd
JinSnow

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

Я собираюсь связать еще один вопрос: оставьте консоль Windows открытой после ошибки Python с этим (на который я отправил ответ для отладки с помощью сценариев перетаскивания и
переноса

Посмотрите ответ, который @maurizio опубликовал ниже - это единственный вопрос, в котором вам не нужно менять свои скрипты на python.
Рорихевт

Ответы:


157

У вас есть несколько вариантов:

  1. Запустите программу с уже открытого терминала. Откройте командную строку и введите:

    python myscript.py

    Чтобы это работало, вам нужен исполняемый файл python на вашем пути. Просто проверьте, как редактировать переменные окружения в Windows, и добавьте C:\PYTHON26(или любой каталог, в который вы установили python).

    Когда программа завершится, она вернет вас к приглашению cmd вместо закрытия окна.

  2. Добавьте код для ожидания в конце вашего скрипта. Для Python2 добавим ...

    raw_input()

    ... в конце скрипта заставляет его ждать Enterключ. Этот метод раздражает, потому что вы должны изменить скрипт и не забыть удалить его, когда закончите. Особенно раздражает при тестировании чужих скриптов. Для Python3 используйте input().

  3. Используйте редактор, который делает паузу для вас. Некоторые редакторы, подготовленные для Python, автоматически запустят вас после выполнения. Другие редакторы позволяют вам настроить командную строку, которую он использует для запуска вашей программы. Я считаю особенно полезным настроить его как " python -i myscript.py" при запуске. Это приводит к тому, что после завершения программы вы попадаете в оболочку Python с загруженной программной средой, поэтому вы можете в дальнейшем играть с переменными и вызывать функции и методы.


8
+1 к пункту 3. Я использую Scite в качестве редактора Python, и он просто сохраняет вывод в собственном окне вывода. Это действительно полезно, потому что вы можете увидеть результаты более чем одного запуска в одном окне.
Джорис Тиммерманс

Я могу увидеть вывод, запустив его с уже открытого терминала. Но мне нужно дать полный адрес скрипта в команде python? Можно ли этого избежать? Когда я использую метод raw_input (), он выдает мне NameError: имя 'raw_input' не определено. Можете ли вы предложить редактор, который автоматически останавливается после выполнения?
Рохитмишра

1
@movingahead: может быть, вы используете Python 3? в питоне 3 он был переименован в input (). Но я бы сейчас использовал python 2.6, так как в python 3 отсутствуют важные сторонние библиотеки, которые еще не были портированы. (см. другие вопросы по Python 2vs3). Что касается редактора, я не использую windows, notepad ++ позволяет вам настроить команду. Я использую Emacs, который имеет версию для Windows, но я никогда не использовал его.
Носкло

@nosklo спасибо !! Да, я использую Python 3. Делать базовые вещи сейчас, поэтому не должно быть большой проблемой. Я попробую блокнот ++. В настоящее время пробую Pydev для Eclipse
rohitmishra

@movingahead Я использую Aptana studio. (Пидев предварительно упакован). это действительно хорошо. нечего сказать.
v.oddou

52

cmd /kэто типичный способ открыть любое консольное приложение (не только Python) с консольным окном, которое останется после закрытия приложения. Самый простой способ сделать это - нажать Win + R, набрать, cmd /kа затем перетащить нужный сценарий в диалоговое окно «Выполнить».


3
Фантастический ответ. Ты должен был это получить.
Jagu

1
Просто для команды python os.system вы должны выполнить os.system ("cmd / k" + myAppPath + "" + myFlagsString)
Jay

1
cmd /kтолько для Windows. Я не могу помочь с альтернативой Mac, извините.
tzot

Нужно ли перетаскивать скрипт, включая саму команду Python? Извините, можно привести пример? Я новый, очень новый для Python под Windows.
Fandango68

1
Этот ответ был самым простым и делает именно то, что мне нужно в среде Windows. После запуска программы окно терминала остается открытым.
Кэмерон

41

Запустите скрипт из уже открытого окна cmd или в конце скрипта добавьте что-то вроде этого в Python 2:

 raw_input("Press enter to exit ;)")

Или в Python 3:

input("Press enter to exit ;)")

1
«Любая клавиша» не будет работать, будет работать только Enter (или Ctrl + D, в зависимости от того, где мы находимся).
Даниэль Андерссон

1
@DanielAndersson Да, изменил текст
Anurag Uniyal

55
Если вы думаете об этом, это довольно глубоко, что только «войти» позволит вам «выйти» ...
Джоэл Б.

знать, что терминал закроется независимо, если произойдет исключение
Джонсон

19

Чтобы ваше окно было открыто в случае исключения (пока при печати исключения)

Python 2

if __name__ == '__main__':
    try:
        ## your code, typically one function call
    except Exception:
        import sys
        print sys.exc_info()[0]
        import traceback
        print traceback.format_exc()
        print "Press Enter to continue ..." 
        raw_input() 

Чтобы окно оставалось открытым в любом случае:

if __name__ == '__main__':
    try:
        ## your code, typically one function call
    except Exception:
        import sys
        print sys.exc_info()[0]
        import traceback
        print traceback.format_exc()
    finally:
        print "Press Enter to continue ..." 
        raw_input()

Python 3

Для Python3 вам придется использовать input()вместоraw_input() и, конечно, адаптировать printоператоры.

if __name__ == '__main__':
    try:
        ## your code, typically one function call
    except BaseException:
        import sys
        print(sys.exc_info()[0])
        import traceback
        print(traceback.format_exc())
        print("Press Enter to continue ...")
        input() 

Чтобы окно оставалось открытым в любом случае:

if __name__ == '__main__':
    try:
        ## your code, typically one function call
except BaseException:
    import sys
    print(sys.exc_info()[0])
    import traceback
    print(traceback.format_exc())
finally:
    print("Press Enter to continue ...")
    input()

15

Вы можете объединить ответы раньше: (для пользователя Notepad ++)

нажмите F5 для запуска текущего скрипта и введите команду:

cmd /k python -i "$(FULL_CURRENT_PATH)"

Таким образом, вы останетесь в интерактивном режиме после выполнения скрипта Python для Notepad ++ и сможете поиграть со своими переменными и так далее :)


Это отличный пакетный файл Windows, если вы измените $ (FULL_CURRENT_PATH) на имя пути Windows.
Нумен

Я обнаружил, что гораздо проще получить плагин PyNPP и назначить ярлык для его запуска (не забудьте отключить предыдущий ярлык F5)
JinSnow

11

Создайте командный файл Windows с этими 2 строками:

python your-program.py

pause

2
Или import os os.system("pause")в конце .pyфайла
Spikatrix

4
Это единственный ответ, который даже отдаленно правильный. Ответы , которые требуют повреждая каждый сценарий Python вы будете когда - либо работать с raw_inputили другим мусором просто неправильны. Либо введите вашу команду в командной строке так, как ожидает вас Python, либо используйте пакетный язык , предоставляемый MS-DOS именно для этой цели с августа 1981 года .
Кевин Дж. Чейз

1
еще лучше, используйте python %*и установите его как одну из программ «открыть с помощью», чтобы вы могли либо щелкнуть правой кнопкой мыши по файлу .py, чтобы открыть окно приостановки, либо я также поместил его в папку Anaconda3 (в PATH) как py_pause.bat, так что теперь Я могу бежать py_pause my-prog.py all my argsот линии cmd
Брайан

7

В Python 2 вы можете сделать это с помощью: raw_input ()

>>print("Hello World!")    
>>raw_input('Waiting a key...')

В Python 3 вы можете сделать это с помощью: input ()

>>print("Hello world!")    
>>input('Waiting a key...')

Кроме того, вы можете сделать это с time.sleep (время)

>>import time
>>print("The program will close in 5 seconds")
>>time.sleep(5)

7

Используя atexit, вы можете приостановить программу сразу после ее выхода. Если причиной выхода является ошибка / исключение, оно будет приостановлено после печати трассировки стека.

import atexit

# Python 2 should use `raw_input` instead of `input`
atexit.register(input, 'Press Enter to continue...')

В моей программе я помещаю вызов atexit.registerв exceptпредложение, чтобы оно приостанавливалось, только если что-то пошло не так.

if __name__ == "__main__":
    try:
        something_that_may_fail()

    except:
        # Register the pause.
        import atexit
        atexit.register(input, 'Press Enter to continue...')

        raise # Reraise the exception.

5

У меня была похожая проблема. В Notepad ++ я использовал команду: она C:\Python27\python.exe "$(FULL_CURRENT_PATH)"закрывала окно cmd сразу после завершения кода.
Теперь я использую cmd /k c:\Python27\python.exe "$(FULL_CURRENT_PATH)"который держит окно cmd открытым.


1
Вы можете добавить «; C: \ Python27» в конец переменной среды Path. Таким образом, его можно сократить до 'cmd / k python -i "$ (FULL_CURRENT_PATH)"' - именно то, что сказано в ответе выше, плюс полезный -i.
Загадка


2

Чтобы просто держать окно открытым, я согласен с Anurag, и это то, что я сделал, чтобы мои окна были открыты для коротких небольших программ типа расчета.

Это просто показало бы курсор без текста:

raw_input() 

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

print('You have reached the end and the "raw_input()" function is keeping the window open') 
raw_input()

Заметка!
(1) В питоне 3 нет raw_input () , только input () .
(2) Используйте одинарные кавычки для обозначения строки; в противном случае, если вы набираете удваивается вокруг чего-либо, например «raw_input ()», он будет думать, что это функция, переменная и т. д., а не текст.

В следующем примере я использую двойные кавычки, и они не будут работать, потому что он думает, что между кавычками и «функцией» есть разрыв, даже когда вы читаете это, ваш собственный разум может в этом разобраться:

print("You have reached the end and the "input()" function is keeping the window open")
input()

Надеюсь, это поможет тем, кто только начинает, и до сих пор не понял, как думает компьютер. Это может занять некоторое время. : О)


2

Если вы хотите запустить свой скрипт из ярлыка на рабочем столе, щелкните правой кнопкой мыши свой файл Python и выберите Send to|Desktop (create shortcut). Затем щелкните правой кнопкой мыши ярлык и выберите Свойства. На вкладке «Ярлык» выберите текстовое поле «Цель»: добавьте cmd /k перед путем и нажмите «ОК». Теперь ярлык должен запускать ваш скрипт без закрытия, и вам не нужноinput('Hit enter to close')

Обратите внимание, если на вашем компьютере установлено более одной версии python, добавьте имя требуемого исполняемого файла python между cmd / k и путем к scipt следующим образом:

cmd /k python3 "C:\Users\<yourname>\Documents\your_scipt.py"

Спасибо! Это на самом деле мне очень помогло. Я пользователь Linux и не мог понять это.
Майкл Брюс

1

Помимо inputи raw_input, вы также можете использовать бесконечный whileцикл, например: while True: pass(Python 2.5 + / 3) или while 1: pass(все версии Python 2/3). Это может использовать вычислительную мощность, хотя.

Вы также можете запустить программу из командной строки. Введите pythonв командной строке (Mac OS X Terminal), и он должен сказать Python 3.?.?(ваша версия Python), он не показывает вашу версию Python, или говорит python: command not found, посмотрите на изменение значений PATH (значения enviromentl, перечисленные выше) / тип C:\(Python folder\python.exe. Если это успешно, введите pythonили C:\(Python installation)\python.exeи полный каталог вашей программы.


2
Это все равно, что оставить машину включенной, пока вы идете на кофе или спать! Опасный на многих уровнях
Fandango68

1

Очень запоздалый ответ, но я создал пакетный файл Windows с именем, pythonbat.batсодержащим следующее:

python.exe %1
@echo off
echo.
pause

а затем указывается pythonbat.batв качестве обработчика по умолчанию для .pyфайлов.

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

Никаких изменений не требуется для любых скриптов Python.

Я все еще могу открыть консольное окно и указать, python myscript.pyхочу ли я ...

(Я только заметил, что @maurizio уже опубликовал этот точный ответ)


0

Если вы хотите оставить cmd-окно открытым и находиться в каталоге исполняемых файлов, это работает в Windows 10:

cmd /k cd /d $(CURRENT_DIRECTORY) && python $(FULL_CURRENT_PATH)

0

Я обнаружил, что решение для моей среды py3 на win10 - это просто запустить cmd или powershell от имени администратора, и вывод останется в том же окне консоли, любой другой тип команды python для запуска пользователя заставит python открыть новое окно консоли.


0

Вы можете просто написать

input()

в конце вашего кода

поэтому, когда вы запускаете скрипт, он будет ждать, пока вы что-то введете

{ENTER for example}

-1

Вы можете открыть PowerShell и набрать «python». После импорта Python вы можете скопировать и вставить исходный код из вашего любимого текстового редактора, чтобы запустить код.

Окно не закроется.


-2
  1. Зайдите сюда и скачайте и установите Notepad ++
  2. Зайдите сюда и скачайте и установите Python 2.7, а не 3.
  3. Начни, запусти Powershell. Введите следующее. [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")
  4. Закройте Powershell и снова откройте его.
  5. Создайте каталог для ваших программ. скрипты mkdir
  6. Откройте этот каталог cd скриптами
  7. В Notepad ++ в новом типе файла: print "hello world"
  8. Сохраните файл как hello.py
  9. Вернитесь к powershell и убедитесь, что вы находитесь в правильном каталоге, набрав dir. Вы должны увидеть ваш файл hello.py там.
  10. В командной строке Powershell введите: python hello.py

-2

Простой взлом, чтобы держать окно открытым:

counter = 0

While (True):

    If (counter == 0):

        # Code goes here

    counter += 1

Счетчик так, что код не будет повторяться.


-2

Самый простой способ:

import time

#Your code here
time.sleep(60)
#end of code (and console shut down)

это оставит код на 1 минуту, а затем закроет его.


1
Как ты смеешь серьезно? Так ненужно. Это совсем не то, о чем этот вопрос, и вы это знаете.
Redgar Tech

-3

На Windows 10 вставьте в начале этого:

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

Странно, но у меня это работает! (Вместе с input () в конце, конечно)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.