Cách chính xác để tạm dừng chương trình Python


161

Tôi đã sử dụng inputchức năng này như một cách để tạm dừng các tập lệnh của mình

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

Có một cách chính thức để làm điều này?


2
Làm việc trong một trình gỡ lỗi và sử dụng điểm dừng?
gddc

Câu trả lời:


219

Có vẻ tốt với tôi (hoặc raw_input()trong Python 2.X). Ngoài ra, bạn có thể sử dụng time.sleep()nếu bạn muốn tạm dừng trong một số giây nhất định.

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

1
Tôi biết về chức năng ngủ trong mô-đun thời gian nhưng nếu tôi có một khối văn bản dài tôi muốn người dùng đọc thì sao?
RandomPhobia

7
Chỉ cần sử dụng printđể hiển thị khối văn bản dài và sau đó input()hoặc raw_input('Press <ENTER> to continue')phù hợp với phiên bản Python của bạn.
mhawke

8
Đối với một khối văn bản dài, tốt nhất là sử dụng input()(hoặc raw_input()trên Python 2.x) để nhắc người dùng, thay vì trì hoãn thời gian. Người đọc nhanh sẽ không muốn chờ đợi sự chậm trễ, người đọc chậm có thể muốn có thêm thời gian trì hoãn, ai đó có thể bị gián đoạn trong khi đọc nó và muốn có nhiều thời gian hơn, v.v. Ngoài ra, nếu ai đó sử dụng chương trình nhiều, anh ấy / cô ấy có thể trở nên quen với cách nó hoạt động và thậm chí không cần phải đọc văn bản dài. Nó chỉ thân thiện hơn để cho phép người dùng kiểm soát thời gian khối văn bản được hiển thị để đọc.
steveha

30

Đối với cửa sổ chỉ sử dụng:

import os
os.system("pause")

23
Đây là Windows cụ thể, trong khi tất cả các câu trả lời hiện có là độc lập với nền tảng.
lvc


17

Vì vậy, tôi thấy điều này hoạt động rất tốt trong nỗ lực mã hóa của mình. Tôi chỉ đơn giản là tạo một chức năng ngay từ đầu chương trình của mình,

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

và bây giờ tôi có thể sử dụng pause()hàm bất cứ khi nào tôi cần giống như tôi đang viết một tệp bó. Ví dụ: trong một chương trình như thế này:

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()

Bây giờ rõ ràng chương trình này không có mục tiêu và chỉ là mục đích ví dụ, nhưng bạn có thể hiểu chính xác ý tôi là gì.

LƯU Ý: Đối với Python 3, bạn sẽ cần sử dụng inputtrái ngược vớiraw_input


7

Tôi đã có một câu hỏi tương tự và tôi đã sử dụng tín hiệu:

import signal

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

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

Vì vậy, bạn đăng ký một trình xử lý cho SIGINT tín hiệu và tạm dừng chờ đợi bất kỳ tín hiệu nào. Bây giờ từ bên ngoài chương trình của bạn (ví dụ như trong bash), bạn có thể chạy kill -2 <python_pid>, nó sẽ gửi tín hiệu 2 (tức là SIGINT) đến chương trình python của bạn. Chương trình của bạn sẽ gọi trình xử lý đã đăng ký của bạn và tiến hành chạy.


2
Lưu ý rằng đây không phải là di động trên các nền tảng, ví dụ. trên Windows không có signal.pause.
kyrill

7

Tôi sử dụng cách sau cho python2 và 3 để tạm dừng thực thi mã cho đến khi người dùng nhấnENTER

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

5

Như được chỉ ra bởi ý kiến của mhawkesteveha , câu trả lời tốt nhất cho câu hỏi chính xác này sẽ là:

Đối với một khối văn bản dài, tốt nhất là sử dụng input('Press <ENTER> to continue')(hoặc raw_input('Press <ENTER> to continue')trên Python 2.x) để nhắc người dùng, thay vì trì hoãn thời gian. Người đọc nhanh sẽ không muốn chờ đợi sự chậm trễ, người đọc chậm có thể muốn có thêm thời gian trì hoãn, ai đó có thể bị gián đoạn trong khi đọc nó và muốn có nhiều thời gian hơn, v.v. Ngoài ra, nếu ai đó sử dụng chương trình nhiều, anh ấy / cô ấy có thể trở nên quen với cách nó hoạt động và thậm chí không cần phải đọc văn bản dài. Nó chỉ thân thiện hơn để cho phép người dùng kiểm soát thời gian khối văn bản được hiển thị để đọc.


5

Rất đơn giản:

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

Tôi đã sử dụng phương pháp này một chút, tuy nhiên tôi cũng thích sử dụng nó như một hàm pause () và tôi không nghĩ cần phải có lối ra (). def pause (): return raw_input ("Nhấn Enter để tiếp tục ...")
jacktrader

NameError: name 'raw_input' is not defined
bers


0

tôi nghĩ rằng cách tốt nhất để dừng việc thực thi là hàm time.s ngủ (). nếu bạn cần tạm dừng thực thi chỉ trong một số trường hợp nhất định, bạn có thể thực hiện một câu lệnh if như thế này:

if somethinghappen:
    time.sleep(seconds)

bạn có thể để trống nhánh khác.


0

Tôi nghĩ rằng tôi thích soln này.

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

Nó ẩn bất cứ thứ gì người dùng gõ vào, giúp làm rõ rằng đầu vào không được sử dụng ở đây.

Nhưng hãy chú ý trong nền tảng OSX, nó sẽ hiển thị một khóa có thể gây nhầm lẫn.

Nó cho thấy một chìa khóa, như tôi đã nói


Có lẽ giải pháp tốt nhất là tự mình làm một cái gì đó tương tự như mô-đun getpass mà không cần thực hiện read -scuộc gọi. Có lẽ làm cho màu fg phù hợp với bg?


0

Theo phương pháp này, bạn có thể tiếp tục chương trình của mình chỉ bằng cách nhấn bất kỳ khóa được chỉ định nào bạn đã chỉ định rằng:

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

cùng một phương pháp nhưng theo một cách khác:

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

Lưu ý: bạn có thể cài đặt keyboardmô-đun đơn giản bằng cách viết phần này vào shell hoặc cmd:

pip install keyboard

0
import os, sys

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

-1

Để tương thích chéo Python 2/3, bạn có thể sử dụng inputthông qua sixthư viện:

import six
six.moves.input( 'Press the <ENTER> key to continue...' )
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.