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?

RandomPhobia
sumber
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")
mhawke
sumber
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")
Chan Tzish
sumber
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

Cether
sumber
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.

olean
sumber
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...")
Adewole Adesola
sumber
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.

ntg
sumber
5

Sangat sederhana:

raw_input("Press Enter to continue ...")
exit()
BuSaeed
sumber
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
5
Print ("This is how you pause")

input()
1beberapa kali berarti
sumber
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.

mbiella
sumber
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?

Samy Bencherif
sumber
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
Neotod
sumber
0
import os, sys

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

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

import six
six.moves.input( 'Press the <ENTER> key to continue...' )
Terima kasih
sumber