2012-08-09 23 views
12

Tak, jak mówi tytuł, chcę odpowiedniego kodu, aby zamknąć mój skrypt Pythona. Do tej pory użyłem input('Press Any Key To Exit'), ale to, co robi, generuje błąd. Chciałbym kod, który po prostu zamyka skrypt bez użycia błędu.Python, naciśnij dowolny klawisz, aby wyjść

Czy ktoś ma pomysł? Google daje mi możliwość wejścia, ale nie chcę, że zamyka stosując ten błąd:

Traceback (most recent call last): 
    File "C:/Python27/test", line 1, in <module> 
    input('Press Any Key To Exit') 
    File "<string>", line 0 

^
SyntaxError: unexpected EOF while parsing 
+1

'= input ('Naciśnij dowolny klawisz, aby wyłączyć')' Czy to znaczy 'wejściowego ('Naciśnij dowolny klawisz, aby wyłączyć')'? Pierwszy nie zrobi nic. Spróbuj także użyć raw_input(). – Josiah

+0

pierwsza nie zrobi nic, ale nie powinna wrzucać żadnego błędu .. po prostu ponownie przypisze nazwę do tego ciągu – wim

+0

@wim Zgoda, dlatego zakładam, że wpisał pytanie niepoprawnie i zasugerował próbę 'raw_input()'. – Josiah

Odpowiedz

9

próbowałeś raw_input()? Może się zdarzyć, że otrzymujesz błąd składniowy, używając input() na python 2.x, który spróbuje uzyskać eval cokolwiek to będzie.

+0

Tak, to naprawiono, ale widziałem, że ktoś odpowiedział, że nie jest dostępny w wersji 3.0, więc jeśli zaktualizuję, utknąłem ponownie? –

+0

@JoppeDnbCuyper: 'raw_input' ma zmienioną nazwę' input' w Pythonie 3.0, więc jeśli dokonasz aktualizacji, wystarczy zmienić każde wystąpienie 'raw_input' na' input' –

+1

wejście jest bardzo niebezpieczne w <3. –

-1

O ile mi wiadomo, nie ma możliwości "wciśnięcia żadnego klawisza". Polecenia input i raw_input wymagają naciśnięcia klawisza ENTER. (raw_input nie jest obsługiwana w Pythonie 3.x)

+0

Sprawdź LISTERINE i moje odpowiedzi. –

13

Jeśli jesteś na oknach następnie polecenie cmd pause powinny działać, mimo że czyta „naciśnij dowolny klawisz, aby kontynuować”

import os 
os.system('pause') 

Linux jest alternatywą read, dobry opis można znaleźć here

4

Chciałbym zniechęcać funkcji platformy w Pythona, jeśli można ich uniknąć, ale można użyć wbudowanego modułu msvcrt.

from msvcrt import getch 

junk = getch() # Assign to a variable just to suppress output. Blocks until key press. 
0

Oto sposób, aby zakończyć przez naciśnięcie dowolnego klawisza na * nix, bez wyświetlania klucz i bez naciskania zwrot. (Kredyt za ogólną metodę to Python read a single character from the user.) Od szturchania SO, wydaje się, że można użyć modułu msvcrt do duplikowania tej funkcji w systemie Windows, ale nie mam go zainstalowanego w dowolnym miejscu, aby przetestować. Nadmierne skomentował wyjaśnić, co się dzieje ...

import sys, termios, tty 

stdinFileDesc = sys.stdin.fileno() #store stdin's file descriptor 
oldStdinTtyAttr = termios.tcgetattr(stdinFileDesc) #save stdin's tty attributes so I can reset it later 

try: 
    print 'Press any key to exit...' 
    tty.setraw(stdinFileDesc) #set the input mode of stdin so that it gets added to char by char rather than line by line 
    sys.stdin.read(1) #read 1 byte from stdin (indicating that a key has been pressed) 
finally: 
    termios.tcsetattr(stdinFileDesc, termios.TCSADRAIN, oldStdinTtyAttr) #reset stdin to its normal behavior 
    print 'Goodbye!' 
0

Ok jestem na Linux Mint 17,1 „Rebecca” i wydaje mi się, że zorientowaliśmy się, jak może wiesz Linux Mint jest wyposażony w zainstalowany Python, nie można zaktualizuj go, ani nie zainstaluj na nim innej wersji. Dowiedziałem się, że python, który jest preinstalowany w Linux Mint to wersja 2.7.6, więc poniższe z pewnością zadziałają na wersji 2.7.6. Jeśli dodasz raw_input('Press any key to exit'), to nie wyświetli żadnych kodów błędów, ale powie ci, że program zakończył się kodem 0. Na przykład jest to mój pierwszy program. MyFirstProgram. Pamiętaj, że to mój pierwszy program i wiem, że to jest do bani, ale jest to dobry przykład użycia "Naciśnij dowolny klawisz, aby wyjść" BTW Jest to również mój pierwszy post na tej stronie, więc przepraszam, jeśli źle sformatowałem.

+1

Witamy w StackOverflow! Powinieneś opublikować krótkie fragmenty w ten sposób jako część swojej odpowiedzi. Edytor udostępnia blok kodu i wbudowane narzędzia kodu, które Cię wspierają. Ułatwi to czytanie innym. Przeczytaj więcej o tym, jak napisać dobrą odpowiedź w [centrum pomocy] (http://stackoverflow.com/help/how-to-answer). –

1

Trochę spóźniony do gry, ale kilka lat temu napisałem bibliotekę, żeby zrobić dokładnie to. Udostępnia ona zarówno funkcję pause() z dostosowywanym komunikatem, jak i bardziej ogólną, międzyplatformową funkcję getch() zainspirowaną przez this answer.

Instalacja z pip install py-getch i używać go tak:

pause() 

Drukuje 'Press any key to continue . . .' domyślnie.Dostarczyć niestandardowy komunikat z:

pause('Press Any Key To Exit.') 

dla wygody, jest również wyposażony w wariancie, który wywołuje sys.exit(status) w jednym kroku:

pause_exit(0, 'Press Any Key To Exit.') 

Check it out.

0

w systemie Windows:

if msvcrt.kbhit(): 
    if msvcrt.getch() == b'q': 
     exit() 
+1

Proszę również dodać wyjaśnienia. – BlackBeard

Powiązane problemy