2009-02-23 34 views
45

Używam skrypty w języku Python wiersza polecenia z paska zadań systemu Windows, używając skrótu wskazującego na interpreter języka Python z faktycznym skryptem jako parametrem.Przerwa w języku Python

Po przetworzeniu skryptu interpreter kończy działanie, a okno wyjściowe jest zamykane, co uniemożliwia odczytanie danych wyjściowych skryptu.

Jaki jest najprostszy sposób, aby otworzyć okno tłumacza, dopóki nie zostanie naciśnięty żaden klawisz?

W plikach wsadowych skrypt można zakończyć pauzą. Najbliższą rzeczą, którą znalazłem w pythonie jest raw_input(), która jest nieoptymalna, ponieważ wymaga naciśnięcia klawisza powrotu (zamiast dowolnego klawisza).

Wszelkie pomysły?

Odpowiedz

51

Jednym ze sposobów jest pozostawienie raw_input() na końcu, więc skrypt czeka na naciśnięcie Enter przed jego zakończeniem.

+25

[Z Python 3+] (http://stackoverflow.com/questions/954834/easy-how-to-use-raw-input-in-3-1), zmieniło się to na just 'input()'. – palswim

+15

To nie jest rozwiązanie. Nie wiem, dlaczego wybrał to autor. Specyfikacje to "Naciśnij dowolny klawisz, a nie tylko Enter". To rozwiązanie działa tylko z enter. –

+3

@ Wolfpack'08 Chociaż zgadzam się, że ta odpowiedź wyraźnie nie odpowiada na pytanie, należy podkreślić, że jest to wysoko na liście wyszukiwania google "python pause", więc nadal jest przydatna mieć tę odpowiedź. – CrazyCasta

4

W systemie Windows można użyć modułu msvcrt.

msvcrt.kbhit() return true jeżeli przyciśnięcie czeka do odczytu.

msvcrt.getch() Przeczytaj naciśnięcie klawisza i zwróć wynikowy znak. Nic nie jest echo do konsoli. To połączenie zablokuje , jeśli naciśnięcie klawisza nie jest już dostępne, ale nie będzie czekać na naciśnięcie klawisza Enter .

Jeśli chcesz go również na systemach uniksowych można spróbować this solution wykorzystaniem modułów termios i fcntl.

13

Nie ma potrzeby czekać na wejście przed zamknięciem, po prostu zmienić swoje polecenia tak:

cmd /K python <script> 

Przełącznik /K wykona polecenie, który następuje, ale pozostawić okno interpretera poleceń otwarty, w przeciwieństwie do /C , który wykonuje, a następnie zamyka.

+0

To nie pomaga w! case określona przez Bernd: uruchamianie skryptu ze skrótu paska zadań, chyba że skrót jest poprawnie skonfigurowany (co nie jest domyślnym przypadkiem). –

+0

@bgbg: ale cała idea jest taka, że ​​skrót jest zmieniony –

+0

/K wymaga do zakończenia cmd przez "wyjście" lub zamknięcie okna za pomocą myszy. To trochę więcej niż pojedyncze naciśnięcie klawisza :-) –

7

Jednym ze sposobów jest zostawić raw_input() na końcu więc skrypt czeka na klawisz enter zanim wypowie.

Zaletą używania metody raw_input() zamiast msvcrt. * Stuff jest to, że ta pierwsza jest częścią standardowego języka Python (tzn. Całkowicie międzyplatformowa). Oznacza to również, że okno skrypt będzie żył po dwukrotnym kliknięciu na ikonę pliku skryptu, bez konieczności zrobić

cmd /K python <script> 
+1

+1: Wiele osób może znaleźć przycisk "Enter" lub "Return" bez popełniania dużych błędów. Żądanie "jakiegokolwiek klucza" zamiast zwrotu wydaje się nieco głupie. –

0
import pdb 
pdb.debug() 

Służy do debugowania skryptu. Powinien być przydatny również do zerwania.

32

Spróbuj os.system("pause") - Użyłem go i zadziałało.

Upewnij się, że w górnej części skryptu znajduje się import os.

8

Najlepszym rozwiązaniem: os.system('pause') < - - wyświetli się komunikat "naciśnij dowolny klawisz, aby kontynuować", podczas gdy dodanie tylko raw_input('') wyświetli komunikat, tylko kursor będzie dostępny.

niezwiązane odpowiedzieć:

os.system("some cmd command") jest naprawdę wielki polecenie jako polecenie może wykonać dowolny plik wsadowy/cmd komendy.

+0

Napotkałem problem 'os.system ('pause')' jak powiedziałeś i przeszukałem to pytanie. –

-1

Jeśli wpiszesz

input("") 

będzie czekać na ich nacisnąć dowolny przycisk a następnie będzie kontynuowane. Możesz również wstawiać tekst między cytatami.

2

Tak, wiem, że publikuję w starym wątku, ale chciałbym dodać mój głos na używając input() (3.x i wyżej).

Dodany do końca mojego skryptu .py, rzeczywiście uniemożliwia otwarcie okna konsoli i natychmiastowe zamknięcie.

Co do "problemu", jaki klawisz nacisnąć, aby go zamknąć, ja (i 1000 innych, jestem tego pewien), po prostu używaj danych wejściowych ("Naciśnij Enter, aby zamknąć").

Dzięki za dodanie do mojego 2 centów wartości :)

.

+0

@ ρяσѕρєяK O czym ty mówisz, człowieku? Mówi tam, aby użyć 'input', o co prosi OP. Musi jednak przepisać i pozbyć się pogawędek. – Superbest

1

Z okien 10 wkładka na początek to:

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

Dziwne, ale to działa na mnie (wraz z wejściem() na koniec, oczywiście)