2009-02-23 33 views
45

Sto eseguendo script Python da riga di comando dalla barra delle applicazioni di Windows avendo un collegamento che punta all'interprete Python con lo script effettivo come parametro.Pausa in Python

Dopo che lo script è stato elaborato, l'interprete termina e la finestra di output viene chiusa, il che rende impossibile leggere l'output dello script.

Qual è il modo più semplice per mantenere aperta la finestra dell'interprete finché non viene premuto un tasto?

Nei file batch, uno può terminare lo script con una pausa. La cosa più vicina a questo che ho trovato in python è raw_input() che non è ottimale perché richiede la pressione della chiave di ritorno (invece di qualsiasi chiave).

Qualche idea?

risposta

51

Un modo è quello di lasciare un raw_input() alla fine in modo che lo script attenda che si preme Invio prima che termini.

+25

[Con Python 3+] (http://stackoverflow.com/questions/954834/easy-how-to-use-raw-input-in-3-1), questo è cambiato in solo 'input()'. – palswim

+15

Questa non è una soluzione. Non so perché l'addetto alla scelta lo abbia scelto. Le specifiche erano "Premere un tasto qualsiasi e non solo Invio". Questa soluzione funziona solo con enter. –

+3

@ Wolfpack'08 Mentre sono d'accordo sul fatto che questa risposta chiaramente non risponda alla domanda, si dovrebbe sottolineare che questo è un punto alto nella lista per una ricerca su google per "python pause" quindi è ancora utile avere questa risposta. – CrazyCasta

4

In Windows, è possibile utilizzare il modulo msvcrt.

msvcrt.kbhit() Ritorna vero se la pressione dei tasti è in attesa di essere letto.

msvcrt.getch() Leggi pressione di un tasto e tornare il carattere risultante. Nulla viene echeggiato nella console . Questa chiamata bloccherà se la pressione di un tasto non è già disponibile , ma non attenderà che venga premuto Invio .

Se si vuole farlo funzionare anche su sistemi Unix-like è possibile provare this solution utilizzando i moduli termios e fcntl.

13

Non c'è bisogno di aspettare per l'input prima della chiusura, basta cambiare il vostro comando in questo modo:

cmd /K python <script> 

L'interruttore /K eseguirà il comando che segue, ma lasciare la finestra interprete dei comandi aperta, a differenza di /C , che viene eseguito e quindi chiuso.

+0

Questo non aiuta nel! caso specificato da Bernd: avvio di uno script da una scorciatoia della barra delle applicazioni, a meno che il collegamento non sia configurato correttamente (che non è il caso predefinito). –

+0

@bgbg: ma l'idea generale è che il collegamento sia stato modificato –

+0

/K richiede di terminare cmd tramite "exit" o chiudere la finestra usando il mouse. È un po 'più di un singolo tasto :-) –

7

Un modo è quello di lasciare un raw_input() alla fine così lo script attende che l'utente preme entrare prima che termina.

Il vantaggio dell'utilizzo di raw_input() anziché di msvcrt. * È che il primo è una parte di Python standard (vale a dire assolutamente multipiattaforma). Questo significa anche che la finestra dello script sarà vivo dopo un doppio clic sull'icona del file di script, senza la necessità di fare

cmd /K python <script> 
+1

+1: molte persone possono trovare il tasto "Invio" o "Invio" senza commettere errori di grandi dimensioni. Esigere "qualsiasi chiave" anziché il ritorno sembra un po 'sciocco. –

0
import pdb 
pdb.debug() 

Questo viene utilizzato per eseguire il debug dello script. Dovrebbe essere utile anche per rompere.

32

Prova os.system("pause") - L'ho usato e ha funzionato per me.

Assicurarsi di includere import os nella parte superiore dello script.

8

L'opzione migliore: os.system('pause') < - - questo in realtà mostrerà un messaggio che dice 'premere un tasto qualsiasi per continuare' mentre aggiungendo solo raw_input('') non stamperà alcun messaggio, solo il cursore sarà disponibile.

non relative a rispondere:

os.system("some cmd command") è davvero un grande comando come il comando in grado di eseguire qualsiasi comando cmd/file batch.

+0

Ho riscontrato il problema di 'os.system ('pause')' come hai detto, e ho cercato questa domanda. –

-1

Se si digita

input("") 

Sarà aspettare che siano loro a premere un tasto qualsiasi allora continuerà. Inoltre puoi inserire del testo tra virgolette.

2

Sì, so che sto postando su un thread precedente ma vorrei aggiungere il mio voto per usando input() (3.xe versioni successive).

Aggiunto alla fine del mio script .py, impedisce effettivamente l'apertura e la chiusura immediata della finestra della console.

Per quanto riguarda il "problema" di quale tasto premere per chiuderlo, io (e 1000 di altri, ne sono sicuro) basta usare l'input ("Premi Invio per chiudere").

Grazie per avermi permesso di aggiungere i miei 2 centesimi vale la pena :)

.

+0

@ ρяσѕρєяK Di cosa stai parlando, amico? Dice proprio lì di usare "input", che è ciò che l'OP stava chiedendo. Ha bisogno di riscrivere e sbarazzarsi dello stile chiacchierone, però. – Superbest

1

Su Windows 10 inserto in beggining questo:

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

strano, ma funziona per me (Insieme con l'ingresso() alla fine, ovviamente)