Cara yang benar untuk menghentikan sementara program Python


161

Saya telah menggunakan inputfungsi ini sebagai cara untuk menjeda skrip saya

print("something")
wait = input("PRESS ENTER TO CONTINUE.")
print("something")

adakah cara formal untuk melakukan ini?


2
Bekerja di debugger dan menggunakan breakpoints?
gddc

Jawaban:


219

Tampaknya baik bagi saya (atau raw_input()dengan Python 2.X). Atau Anda dapat menggunakan time.sleep()jika Anda ingin berhenti selama beberapa detik.

import time
print("something")
time.sleep(5.5)    # pause 5.5 seconds
print("something")

1
Saya tahu tentang fungsi tidur dalam modul waktu tetapi bagaimana jika saya memiliki blok teks yang panjang Saya ingin pengguna membaca?
RandomPhobia

7
Cukup gunakan printuntuk menampilkan blok teks yang panjang dan kemudian input()atau yang raw_input('Press <ENTER> to continue')sesuai untuk versi Python Anda.
mhawke

8
Untuk blok teks yang panjang, yang terbaik adalah menggunakan input()(atau raw_input()pada Python 2.x) untuk meminta pengguna, daripada penundaan waktu. Pembaca cepat tidak akan mau menunggu penundaan, pembaca lambat mungkin ingin lebih banyak waktu penundaan, seseorang mungkin terganggu saat membacanya dan ingin lebih banyak waktu, dll. Juga, jika seseorang banyak menggunakan program, ia / dia mungkin terbiasa dengan cara kerjanya dan bahkan tidak perlu membaca teks yang panjang. Hanya lebih ramah untuk membiarkan pengguna mengontrol berapa lama blok teks ditampilkan untuk dibaca.
steveha

30

Hanya untuk windows gunakan:

import os
os.system("pause")

23
Ini adalah spesifik Windows, sedangkan semua jawaban yang ada adalah platform independen.
Lvc


17

Jadi, saya menemukan ini berfungsi dengan sangat baik dalam upaya pengkodean saya. Saya hanya membuat fungsi di awal program saya,

def pause():
    programPause = raw_input("Press the <ENTER> key to continue...")

dan sekarang saya bisa menggunakan pause()fungsi kapan pun saya perlu seperti seolah-olah saya sedang menulis file batch. Misalnya , dalam program seperti ini:

import os
import system

def pause():
    programPause = raw_input("Press the <ENTER> key to continue...")

print("Think about what you ate for dinner last night...")
pause()

Sekarang jelas program ini tidak memiliki tujuan dan hanya untuk tujuan contoh, tetapi Anda dapat memahami dengan tepat apa yang saya maksud.

CATATAN: Untuk Python 3, Anda harus menggunakan yang inputbertentanganraw_input


7

Saya memiliki pertanyaan serupa dan saya menggunakan sinyal:

import signal

def signal_handler(signal_number, frame):
    print "Proceed ..."

signal.signal(signal.SIGINT, signal_handler)
signal.pause()

Jadi, Anda mendaftarkan pawang untuk sinyal SIGINT dan berhenti menunggu sinyal apa pun. Sekarang dari luar program Anda (misalnya dalam bash), Anda dapat menjalankan kill -2 <python_pid>, yang akan mengirim sinyal 2 (yaitu SIGINT) ke program python Anda. Program Anda akan memanggil penangan terdaftar Anda dan melanjutkan menjalankan.


2
Perhatikan bahwa ini tidak portabel di semua platform, mis. pada Windows tidak ada signal.pause.
kyrill

7

Saya menggunakan yang berikut ini untuk python2 dan 3 untuk menghentikan sementara eksekusi kode sampai pengguna menekanENTER

import six
if six.PY2:
    raw_input("Press the <ENTER> key to continue...")
else:
    input("Press the <ENTER> key to continue...")

5

Seperti yang ditunjukkan oleh komentar mhawke dan steveha , jawaban terbaik untuk pertanyaan ini adalah:

Untuk blok teks yang panjang, yang terbaik adalah menggunakan input('Press <ENTER> to continue')(atau raw_input('Press <ENTER> to continue')pada Python 2.x) untuk meminta pengguna, daripada penundaan waktu. Pembaca cepat tidak akan mau menunggu penundaan, pembaca lambat mungkin ingin lebih banyak waktu penundaan, seseorang mungkin terganggu saat membacanya dan ingin lebih banyak waktu, dll. Juga, jika seseorang banyak menggunakan program, ia / dia mungkin terbiasa dengan cara kerjanya dan bahkan tidak perlu membaca teks yang panjang. Hanya lebih ramah untuk membiarkan pengguna mengontrol berapa lama blok teks ditampilkan untuk dibaca.


5

Sangat sederhana:

raw_input("Press Enter to continue ...")
exit()

Saya telah menggunakan metode ini sedikit, namun saya juga suka menggunakannya sebagai fungsi pause () dan saya tidak berpikir ada kebutuhan untuk keluar (). def pause (): return raw_input ("Tekan Enter untuk melanjutkan ...")
jacktrader

NameError: name 'raw_input' is not defined
bers


0

Saya pikir cara terbaik untuk menghentikan eksekusi adalah fungsi time.sleep (). jika Anda perlu menangguhkan eksekusi hanya dalam kasus-kasus tertentu, Anda cukup menerapkan pernyataan if seperti ini:

if somethinghappen:
    time.sleep(seconds)

Anda dapat membiarkan cabang yang lain kosong.


0

Saya pikir saya suka soln ini.

import getpass
getpass.getpass("Press Enter to Continue")

Ia menyembunyikan apa pun yang diketik pengguna, yang membantu memperjelas bahwa input tidak digunakan di sini.

Tetapi berhati-hatilah dalam platform OSX ini menampilkan kunci yang mungkin membingungkan.

Ini menunjukkan kunci, seperti yang saya katakan


Mungkin solusi terbaik adalah melakukan sesuatu yang mirip dengan modul getpass sendiri, tanpa melakukan read -spanggilan. Mungkin membuat warna fg cocok dengan bg?


0

Dengan metode ini, Anda dapat melanjutkan program hanya dengan menekan tombol apa saja yang telah Anda tentukan bahwa:

import keyboard
while True:
    key = keyboard.read_key()
    if key == 'space':  # you can put any key you like instead of 'space'
        break

metode yang sama tetapi dengan cara lain:

import keyboard
while True:
    if keyboard.is_pressed('space'):  # same, you can put any key you like instead of 'space'
        break

Catatan: Anda dapat menginstal keyboardmodul hanya dengan menulis ini di shell atau cmd:

pip install keyboard

0
import os, sys

if sys.platform == 'win32':
    os.system('pause')
else:
    input('Press any key to continue...')

-1

Untuk kompatibilitas lintas Python 2/3, Anda dapat menggunakan inputmelalui sixperpustakaan:

import six
six.moves.input( 'Press the <ENTER> key to continue...' )
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.