Як утримувати відкрите вікно виводу скрипта Python?


193

Я щойно почав з Python. Коли я виконую файл сценарію python у Windows, вікно виводу з'являється, але миттєво відходить. Мені це потрібно, щоб я залишився там, щоб я міг проаналізувати свої результати. Як я можу тримати його відкритим?


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

2
просто перетягніть сценарій у вікно cmd
JinSnow

Ви думаєте, що вікно виводу повинно залишатися відкритим за замовчуванням. Це робиться при запуску Python в Mac OS. Дуже засмучує
Фанданго68

Я збираюся пов’язати ще одне запитання: Тримайте консоль Windows відкритою після помилки Python на цьому (на який я розмістив відповідь на налагодження за допомогою сценаріїв перетягування і перетягування python.)
akinuri

Дивіться відповідь, яку @maurizio розмістив нижче - це єдиний, якому не потрібно, щоб ви змінювали свої сценарії python.
roryhewitt

Відповіді:


157

У вас є кілька варіантів:

  1. Запустіть програму з уже відкритого терміналу. Відкрийте командний рядок і введіть:

    python myscript.py

    Для цього вам потрібен виконуваний пітон на вашому шляху. Просто перевірте, як редагувати змінні середовища в Windows, і додайте C:\PYTHON26(або будь-який каталог, в який ви встановили python).

    Коли програма закінчиться, вона поверне вас до запиту cmd, а не закриває вікно.

  2. Додайте код, щоб чекати в кінці сценарію. Для Python2, додаючи ...

    raw_input()

    ... в кінці сценарію змушує зачекати Enterключ. Цей метод дратує, тому що ви повинні змінити сценарій, і вам потрібно запам'ятати його видалення, коли ви закінчите. Особливо дратує при тестуванні сценаріїв інших людей. Для Python3 використовуйте input().

  3. Використовуйте редактор, який робить для вас паузу. Деякі редактори, підготовлені до python, автоматично призупинять вас після виконання. Інші редактори дозволяють налаштувати командний рядок, який він використовує для запуску програми. Я вважаю особливо корисним налаштувати його як " python -i myscript.py" під час запуску. Після закінчення програми ви переходите до оболонки python із завантаженим програмним середовищем, щоб ви могли надалі грати зі змінними та викликати функції та методи.


8
+1 до пункту 3. Я використовую Scite як мій редактор Python, і він просто зберігає вихід у власному вікні виводу. Це дійсно корисно, оскільки ви можете потенційно бачити результат більш ніж одного запуску в одному вікні.
Joris Timmermans

Я можу побачити вихід, запустивши його з уже відкритого терміналу. Але мені потрібно вказати повну адресу скрипту в команді python? Чи можна цього уникнути? Коли я використовую метод raw_input (), він дає мені NameError: ім'я 'raw_input' не визначено. Чи можете ви запропонувати редактор, який автоматично зупиняється після виконання?
rohitmishra

1
@movingahead: можливо, ви використовуєте python 3? у python 3 він був перейменований на input (). Але я би зараз використовував python 2.6, оскільки python 3 не має важливих сторонніх бібліотек, які ще не перенесені. (див. інші питання на python 2vs3). Щодо редактора, я не використовую Windows, блокнот ++ дозволяє налаштувати команду. Я використовую emacs, який має версію Windows, але я ніколи його не використовував.
nosklo

@nosklo дякую !! Так, я використовую Python 3. Зараз робити базові речі не повинно бути великою проблемою. Я спробую блокнот ++. На даний момент я пробую Pydev для Eclipse
rohitmishra

@movingahead Я використовую студію Aptana. (pydev попередньо упакований). це дійсно добре. нічого сказати.
v.oddou

52

cmd /k- типовий спосіб відкрити будь-яку консольну програму (не лише Python) з консольним вікном, яке залишиться після закриття програми. Найпростіший спосіб, який я можу зробити, це натиснути Win + R, ввести cmd /kта потім перетягнути і скинути потрібний сценарій у діалогове вікно Запуск.


3
Фантастична відповідь. Ви повинні були це отримати.
Ягу

1
Тільки fyi для команди python os.system ви зробили б os.system ("cmd / k" + myAppPath + "" + myFlagsString)
Jay

1
cmd /kє лише для Windows. Не можу допомогти з альтернативою Mac, вибачте.
цот

Чи потрібно перетягувати сценарій, включаючи саму команду Python? Вибачте, чи можу я мати приклад? Я новий, дуже новий для Python під вікнами.
Fandango68

1
Ця відповідь була найпростішою вперед і робить саме те, що мені потрібно в умовах Windows. Після виконання програми термінальне вікно залишається відкритим.
CameronAtkinson

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
Якщо ви задумаєтесь, то це настільки глибоко, що лише "вхід" дозволить вам "вийти" ...
Джоель Б

майте на увазі, що термінал закриється незалежно, якщо станеться виняток
johnson

19

Щоб зберегти вікно відкритим у випадку винятку (все ж, друкуючи виняток)

Пітон 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()

Пітон 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 за допомогою цих двох рядків:

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 (time)

>>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) У python 3 немає raw_input () , просто введення () .
(2) Використовуйте одинарні лапки для позначення рядка; в іншому випадку, якщо ви введете подвійні навколо чого-небудь, наприклад, "raw_input ()", він подумає, що це функція, змінна тощо, а не текст.

У цьому наступному прикладі я використовую подвійні лапки, і це не спрацює, оскільки він вважає, що між цитатами "" і "функція" є розрив, навіть коли ви читаєте їх, ваш власний розум може це зрозуміти:

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

Сподіваємось, це допомагає іншим, хто, можливо, починає і досі не зрозумів, як думає комп'ютер. Це може зайняти деякий час. : o)


2

Якщо ви хочете запустити свій скрипт із ярлика робочого столу, клацніть правою кнопкою миші файл python та виберіть Send to|Desktop (create shortcut). Потім клацніть правою кнопкою миші ярлик і виберіть Властивості. На вкладці Ярлик виберіть текстове поле Ціль: і додайте cmd /k перед контуром та натисніть кнопку ОК. Ярлик тепер повинен запускати ваш сценарій без закриття, і він вам не потрібенinput('Hit enter to close')

Зауважте, якщо у вас на машині є більше однієї версії python, додайте ім'я потрібного виконуваного python між cmd / k та шип-шлях таким чином:

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, перелічені вище) / type C:\(Python folder\python.exe. Якщо це успішно, введіть pythonабо C:\(Python installation)\python.exeі повний каталог вашої програми.


2
Це схоже на те, що ти залишаєш свій автомобіль, поки ти їдеш на каву або спати! Небезпечний на багатьох рівнях
Fandango68

1

Дуже запізнілий відповідь, але я створив файл Batch Windows, який називається pythonbat.bat:

python.exe %1
@echo off
echo.
pause

а потім вказано pythonbat.batяк обробник .pyфайлів за замовчуванням .

Тепер, коли я двічі клацніть .pyфайл у File Explorer, він відкриває нове вікно консолі, запускає скрипт 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. У Блокноті ++ у новому типі файлу: print "hello world"
  8. Збережіть файл як hello.py
  9. Поверніться до покрівелі і переконайтеся, що ви знаходитесь у правильному каталозі, ввівши 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 -*-

Дивно, але це працює для мене! (Разом із введенням () наприкінці, звичайно)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.