Jak utrzymać otwarte okno wyjściowe skryptu Python?


193

Właśnie zacząłem z Python. Kiedy uruchamiam plik skryptu Pythona w systemie Windows, okno wyjściowe pojawia się, ale natychmiast znika. Potrzebuję go, aby tam pozostać, aby móc analizować moje wyniki. Jak mogę zachować to otwarte?


6
Spóźnione +1000. Używam Pythona jako języka nauczania dla znajomego, który korzysta z systemu Windows, i nie mogłem uwierzyć, ile kłopotów (przynajmniej na podstawie istniejącej dokumentacji) dotarcia do miejsca, w którym możemy uruchomić skrypt i zobaczyć wyniki.
Cascabel

2
po prostu przeciągnij / upuść skrypt w oknach cmd
JinSnow

Można by pomyśleć, że okno wyjściowe powinno pozostać domyślnie otwarte. Dzieje się to podczas uruchamiania Pythona w systemie Mac OS. Bardzo frustrujące
Fandango68,

Połączę kolejne pytanie Zachowaj konsolę Windows otwartą po błędzie Pythona do tego (które opublikowałem odpowiedź na debugowanie za pomocą skryptów pythonowych metodą przeciągnij i upuść)
akinuri

Zobacz odpowiedź zamieszczoną poniżej przez @maurizio - jest to jedyna taka, która nie wymaga zmiany skryptów Pythona.
roryhewitt

Odpowiedzi:


157

Masz kilka opcji:

  1. Uruchom program z już otwartego terminalu. Otwórz wiersz polecenia i wpisz:

    python myscript.py

    Aby to zadziałało, potrzebujesz na swojej ścieżce pliku wykonywalnego Python. Po prostu sprawdź, jak edytować zmienne środowiskowe w systemie Windows i dodaj C:\PYTHON26(lub dowolny katalog, w którym zainstalowałeś Pythona).

    Kiedy program się skończy, przeniesie Cię z powrotem do monitu cmd zamiast zamykać okno.

  2. Dodaj kod, aby czekać na koniec skryptu. W przypadku Python2 dodawanie ...

    raw_input()

    ... na końcu skryptu każe mu czekać na Enterklucz. Ta metoda jest denerwująca, ponieważ musisz zmodyfikować skrypt i pamiętać o jego usunięciu po zakończeniu. Szczególnie denerwujące podczas testowania skryptów innych osób. W przypadku Python3 użyj input().

  3. Użyj edytora, który wstrzymuje się za Ciebie. Niektóre edytory przygotowane dla Pythona automatycznie wstrzymują się po wykonaniu. Inne edytory pozwalają na konfigurację wiersza poleceń, którego używa do uruchamiania programu. Uważam, że szczególnie przydatne jest skonfigurowanie go jako „ python -i myscript.py” podczas działania. Spowoduje to przeniesienie do powłoki Pythona po zakończeniu programu z załadowanym środowiskiem programu, dzięki czemu możesz dalej bawić się zmiennymi oraz wywoływać funkcje i metody.


8
+1 do pozycji 3. Używam Scite jako mojego edytora Python i po prostu utrzymuje dane wyjściowe we własnym oknie wyników. Jest to bardzo przydatne, ponieważ potencjalnie możesz zobaczyć wyniki więcej niż jednego uruchomienia w jednym oknie.
Joris Timmermans

Jestem w stanie zobaczyć wynik, uruchamiając go z już otwartego terminala. Ale muszę podać pełny adres skryptu w poleceniu python? Czy da się tego uniknąć? Kiedy używam metody raw_input (), daje mi NameError: nazwa „raw_input” nie jest zdefiniowana. Czy możesz zasugerować edytor, który automatycznie zatrzymuje się po wykonaniu?
rohitmishra

1
@movingahead: może używasz Pythona 3? w Pythonie 3 zmieniono jego nazwę na input (). Ale na razie użyłbym Pythona 2.6, ponieważ w Pythonie 3 brakuje ważnych bibliotek stron trzecich, które nie zostały jeszcze przeniesione. (zobacz inne pytania dotyczące python 2vs3). O edytorze nie korzystam z systemu Windows, notatnik ++ pozwala skonfigurować polecenie. Używam emacsa, który ma wersję systemu Windows, ale nigdy go nie użyłem.
nosklo

@nosklo dzięki !! Tak, używam Pythona 3. Robię teraz podstawowe rzeczy, więc nie powinno to stanowić większego problemu. Spróbuję notepad ++. Obecnie testuję Pydev dla Eclipse
rohitmishra

@movingahead Używam Aptana studio. (pydev wstępnie zapakowany). To jest naprawdę dobre. nic do powiedzenia.
v.oddou

52

cmd /kjest typowym sposobem otwierania dowolnej aplikacji konsoli (nie tylko Pythona) za pomocą okna konsoli, które pozostanie po zamknięciu aplikacji. Najłatwiej mogę to zrobić, naciskając Win + R, wpisując, cmd /ka następnie przeciągając i upuszczając skrypt, który chcesz, w oknie dialogowym Uruchom.


3
Fantastyczna odpowiedź. Powinieneś to mieć.
Jagu

1
Tylko fyi dla komendy python os.system, którą zrobiłbyś os.system ("cmd / k" + myAppPath + "" + myFlagsString)
Jay

1
cmd /kjest tylko dla systemu Windows. Przykro mi, nie mogę pomóc z alternatywą dla komputerów Mac.
tzot

Czy musisz przeciągnąć skrypt, w tym samą komendę Python? Przepraszam, czy mogę prosić o przykład? Jestem nowy, bardzo nowy w Pythonie pod Windows.
Fandango68,

1
Ta odpowiedź była najprostsza i robi dokładnie to, czego potrzebowałem w środowisku Windows. Po uruchomieniu programu okno terminala pozostaje otwarte.
CameronAtkinson

41

Uruchom skrypt z już otwartego okna cmd lub na końcu skryptu dodaj coś takiego w Python 2:

 raw_input("Press enter to exit ;)")

Lub w Python 3:

input("Press enter to exit ;)")

1
„Dowolny klawisz” nie zadziała, tylko Enter (lub Ctrl + D, w zależności od tego, gdzie jesteśmy).
Daniel Andersson,

1
@DanielAndersson tak, zmienił tekst
Anurag Uniyal

55
Jeśli się nad tym zastanowić, to jest tak głęboko, że tylko „wejście” pozwoli ci „wyjść” ...
Joel B,

pamiętaj, że terminal zostanie zamknięty niezależnie od tego, czy wystąpi wyjątek
John

19

Aby zachować okno otwarte w przypadku wyjątku (jeszcze podczas drukowania wyjątku)

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

Aby okno pozostało otwarte w każdym przypadku:

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

W przypadku Python3 będziesz musiał użyć input()zamiastraw_input() i oczywiście dostosować printinstrukcje.

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

Aby okno pozostało otwarte w każdym przypadku:

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

możesz połączyć odpowiedzi wcześniej: (dla użytkownika Notepad ++)

naciśnij klawisz F5, aby uruchomić bieżący skrypt i wpisz polecenie:

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

w ten sposób pozostajesz w trybie interaktywnym po uruchomieniu skryptu pythonowego Notepad ++ i możesz bawić się swoimi zmiennymi i tak dalej :)


To świetny plik wsadowy dla systemu Windows, jeśli zmienisz $ (FULL_CURRENT_PATH) na nazwę ścieżki Windows.
Noumenon

Odkryłem, że dużo łatwiej jest pobrać wtyczkę PyNPP i przypisać skrót do jej uruchomienia (nie zapomnij wyłączyć poprzedniego skrótu F5)
JinSnow

11

Utwórz plik wsadowy systemu Windows za pomocą tych 2 wierszy:

python your-program.py

pause

2
Lub import os os.system("pause")na końcu .pypliku
Spikatrix

4
To jedyna odpowiedź, która jest nawet zdalnie poprawna. Odpowiedzi, które wymagają zgorszenie każdy skrypt Pythona będzie kiedykolwiek uruchomić z raw_inputlub inne śmieci są po prostu błędne. Wpisz polecenie w wierszu poleceń w sposób, w jaki oczekuje tego Python, lub użyj języka wsadowego dostarczanego z MS-DOS do tego celu od sierpnia 1981 r .
Kevin J. Chase,

1
jeszcze lepiej, użyj go python %*i ustaw jako jeden z programów „otwórz za pomocą”, dzięki czemu możesz albo kliknąć plik .py prawym przyciskiem myszy, aby otworzyć okno pauzy, albo umieścić go w folderze Anaconda3 (w ścieżce) jako py_pause.bat, więc teraz Mogę biegać py_pause my-prog.py all my argsz linii cmd
brian

7

W Pythonie 2 możesz to zrobić za pomocą: raw_input ()

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

W Pythonie 3 możesz to zrobić za pomocą: input ()

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

Możesz to również zrobić za pomocą time.sleep (time)

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

7

Używając atexit, możesz zatrzymać program zaraz po jego wyjściu. Jeśli błąd / wyjątek jest przyczyną wyjścia, zatrzyma się po wydrukowaniu śledzenia stosu.

import atexit

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

W moim programie, kładę wywołanie atexit.registerw exceptklauzuli, tak, że będzie wstrzymać tylko wtedy, gdy coś poszło nie tak.

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

Miałem podobny problem. W Notepad ++ korzystałem z polecenia: C:\Python27\python.exe "$(FULL_CURRENT_PATH)"które zamykało okno cmd natychmiast po zakończeniu kodu.
Teraz używam, cmd /k c:\Python27\python.exe "$(FULL_CURRENT_PATH)"który utrzymuje otwarte okno cmd.


1
Możesz dodać „; C: \ Python27” na końcu zmiennej środowiskowej Path. W ten sposób można go skrócić do „cmd / k python -i” $ (FULL_CURRENT_PATH) ”- Dokładnie to, co mówi powyższa odpowiedź plus użyteczne -i.
Enigma,


2

Aby po prostu pozostawić otwarte okno, zgadzam się z Anurag i to właśnie zrobiłem, aby moje okna były otwarte dla krótkich, małych programów typu obliczeniowego.

To po prostu pokazuje kursor bez tekstu:

raw_input() 

Poniższy przykład dałby jasny komunikat, że program jest zakończony i nie czekał na kolejne pytanie wejściowe w programie:

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

Uwaga!
(1) W Pythonie 3 nie ma raw_input () , tylko input () .
(2) Użyj pojedynczych cudzysłowów, aby wskazać ciąg; w przeciwnym razie, jeśli wpiszesz dublowanie wokół czegoś, na przykład „raw_input ()”, pomyślisz, że jest to funkcja, zmienna itp., a nie tekst.

W następnym przykładzie używam podwójnych cudzysłowów i to nie zadziała, ponieważ wydaje się, że istnieje przerwa w cudzysłowach między „funkcją” a „funkcją”, nawet jeśli ją czytasz, twój własny umysł może to doskonale zrozumieć:

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

Mam nadzieję, że pomoże to innym osobom, które zaczynają i nadal nie wiedzą, jak myśli komputer. To może chwilę potrwać. : o)


2

Jeśli chcesz uruchomić skrypt ze skrótu na pulpicie, kliknij prawym przyciskiem myszy plik Pythona i wybierz Send to|Desktop (create shortcut). Następnie kliknij prawym przyciskiem myszy skrót i wybierz Właściwości. Na karcie Skrót wybierz pole tekstowe Cel: dodaj cmd /k przed ścieżką i kliknij OK. Skrót powinien teraz uruchamiać skrypt bez zamykania i nie potrzebujesz goinput('Hit enter to close')

Uwaga: jeśli masz więcej niż jedną wersję Pythona na swoim komputerze, dodaj nazwę wymaganego pliku wykonywalnego Pythona między cmd / k a ścieżką scipt w następujący sposób:

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

Dzięki! To naprawdę bardzo mi pomogło. Jestem użytkownikiem systemu Linux i nie mogłem tego rozgryźć.
Michael Bruce

1

Oprócz inputi raw_inputmożesz także użyć nieskończonej whilepętli, takiej jak: while True: pass(Python 2.5 + / 3) lubwhile 1: pass (wszystkie wersje Python 2/3). Może to jednak wymagać mocy obliczeniowej.

Możesz także uruchomić program z wiersza poleceń. Wpisz pythonw wierszu poleceń (Mac OS X Terminal) i powinien powiedziećPython 3.?.? (Twoja wersja w języku Python) Nie pokazuje twojej wersji w języku Python lub mówi python: command not found: spójrz na zmianę wartości PATH (wartości środowiskowe, wymienione powyżej) / type C:\(Python folder\python.exe. Jeśli to się powiedzie, typ pythonlub C:\(Python installation)\python.exeoraz pełny katalog twojego programu.


2
To jest jak pozostawienie samochodu w ruchu, gdy idziesz na kawę lub spać! Niebezpieczne na wielu poziomach
Fandango68,

1

Bardzo spóźniona odpowiedź, ale utworzyłem plik wsadowy Windows o nazwie pythonbat.batzawierający:

python.exe %1
@echo off
echo.
pause

a następnie określone pythonbat.bat jako domyślny moduł obsługi dla.py plików.

Teraz, kiedy kliknę dwukrotnie a .py plik w Eksploratorze plików, otwiera nowe okno konsoli, uruchamia skrypt Python, a następnie zatrzymuje się (pozostaje otwarty), dopóki nie naciśnie żadnego klawisza ...

Żadne zmiany nie są wymagane w żadnych skryptach Python.

Nadal mogę otworzyć okno konsoli i określić python myscript.py czy chcę ...

(Właśnie zauważyłem, że @ Maurizio opublikował już tę dokładną odpowiedź)


0

Jeśli chcesz pozostać w otwartym oknie cmd ORAZ znajdować się w katalogu z uruchomionym plikiem, działa to w systemie Windows 10:

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

0

Znalazłem rozwiązanie w moim środowisku py3 na win10 to po prostu uruchom cmd lub PowerShell jako Administrator, a dane wyjściowe pozostaną w tym samym oknie konsoli, każde inne polecenie użytkownika uruchamiające python spowoduje, że Python otworzy nowe okno konsoli.


0

Możesz po prostu pisać

input()

na końcu kodu

dlatego po uruchomieniu skryptu będzie on czekał na wprowadzenie danych

{ENTER for example}

-1

Możesz otworzyć PowerShell i wpisać „python”. Po zaimportowaniu Pythona możesz skopiować kod źródłowy z ulubionego edytora tekstu, aby go uruchomić.

Okno się nie zamknie.


-2
  1. Przejdź tutaj i pobierz i zainstaluj Notepad ++
  2. Przejdź tutaj i pobierz i zainstaluj Python 2.7 nie 3.
  3. Uruchom, uruchom PowerShell. Wpisz następujące informacje. [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")
  4. Zamknij PowerShell i otwórz go ponownie.
  5. Utwórz katalog dla swoich programów. skrypty mkdir
  6. Otwórz skrypty cd tego katalogu
  7. W Notepad ++ w nowym typie pliku: print "hello world"
  8. Zapisz plik jako hello.py
  9. Wróć do PowerShell i upewnij się, że jesteś we właściwym katalogu, wpisując dir. Powinieneś zobaczyć tam swój plik hello.py.
  10. W wierszu polecenia PowerShell wpisz: python hello.py

-2

Prosty hack, aby utrzymać okno otwarte:

counter = 0

While (True):

    If (counter == 0):

        # Code goes here

    counter += 1

Licznik jest taki, że kod się nie powtórzy.


-2

Najprostszy sposób:

import time

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

spowoduje to pozostawienie kodu na 1 minutę, a następnie zamknięcie.


1
Jak śmiesz na poważnie. Tak niepotrzebne. Wcale nie o to chodzi i wiesz o tym.
Redgar Tech

-3

W Windows 10 wstaw na początku:

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

Dziwne, ale dla mnie działa! (Oczywiście wraz z input () na końcu)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.