วิธีที่ถูกต้องในการหยุดโปรแกรม Python ชั่วคราว


161

ฉันใช้inputฟังก์ชันเป็นวิธีหยุดสคริปต์ของฉันชั่วคราว

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

มีวิธีที่เป็นทางการในการทำเช่นนี้หรือไม่?


2
ทำงานในดีบักเกอร์และใช้เบรกพอยต์หรือไม่
gddc

คำตอบ:


219

ดูเหมือนจะดีกับฉัน (หรือraw_input()ใน Python 2.X) อีกวิธีหนึ่งคือคุณสามารถใช้time.sleep()ถ้าคุณต้องการหยุดชั่วคราวเป็นจำนวนวินาที

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

1
ฉันรู้เกี่ยวกับฟังก์ชั่นการนอนหลับในโมดูลเวลา แต่ถ้าฉันมีข้อความยาว ๆ ที่ฉันต้องการให้ผู้ใช้อ่าน?
RandomPhobia

7
เพียงใช้printเพื่อแสดงบล็อคข้อความที่มีความยาวจากนั้นinput()หรือraw_input('Press <ENTER> to continue')ตามความเหมาะสมกับ Python เวอร์ชันของคุณ
mhawke

8
สำหรับบล็อกข้อความที่ยาวแนะนำให้ใช้input()(หรือraw_input()บน Python 2.x) เพื่อเตือนผู้ใช้มากกว่าการหน่วงเวลา ผู้อ่านที่รวดเร็วไม่ต้องการรอช้าผู้อ่านที่ช้าอาจต้องการเวลามากขึ้นในการล่าช้าบางคนอาจถูกขัดจังหวะในขณะที่อ่านและต้องการเวลามากขึ้น ฯลฯ นอกจากนี้หากมีคนใช้โปรแกรมมากเขา / เธออาจคุ้นเคยกับการทำงานและไม่จำเป็นต้องอ่านข้อความยาว ๆ เป็นเรื่องง่ายที่จะให้ผู้ใช้ควบคุมว่าจะแสดงบล็อคข้อความเป็นระยะเวลาเท่าใด
steveha

30

สำหรับ windowsใช้เท่านั้น :

import os
os.system("pause")

23
นี่คือเฉพาะ Windows ในขณะที่คำตอบทั้งหมดที่มีอยู่เป็นแพลตฟอร์มที่เป็นอิสระ
lvc


17

ดังนั้นฉันจึงพบว่าสิ่งนี้ทำงานได้ดีมากในความพยายามเข้ารหัสของฉัน ฉันเพิ่งสร้างฟังก์ชั่นเมื่อเริ่มต้นโปรแกรม

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

และตอนนี้ฉันสามารถใช้pause()ฟังก์ชั่นเมื่อใดก็ตามที่ฉันต้องการราวกับว่าฉันกำลังเขียนไฟล์แบตช์ ตัวอย่างเช่นในโปรแกรมเช่นนี้:

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

ตอนนี้เห็นได้ชัดว่าโปรแกรมนี้ไม่มีวัตถุประสงค์และเป็นเพียงตัวอย่างเท่านั้น แต่คุณสามารถเข้าใจได้อย่างแม่นยำในสิ่งที่ฉันหมายถึง

หมายเหตุ: สำหรับ Python 3 คุณจะต้องใช้งานinputแทนraw_input


7

ฉันมีคำถามที่คล้ายกันและฉันใช้สัญญาณ:

import signal

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

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

ดังนั้นคุณลงทะเบียนตัวจัดการสัญญาณ SIGINT และหยุดรอสัญญาณใด ๆ ตอนนี้จากนอกโปรแกรมของคุณ (เช่นใน bash) คุณสามารถเรียกใช้kill -2 <python_pid>ซึ่งจะส่งสัญญาณ 2 (เช่น SIGINT) ไปยังโปรแกรม python ของคุณ โปรแกรมของคุณจะโทรหาผู้จัดการที่ลงทะเบียนของคุณและดำเนินการต่อไป


2
โปรดทราบว่านี่ไม่ใช่การพกพาข้ามแพลตฟอร์มเช่น บน Windows signal.pauseไม่มี
kyrill

7

ฉันใช้สิ่งต่อไปนี้สำหรับpython2 และ 3 เพื่อหยุดการเรียกใช้โค้ดชั่วคราวจนกว่าผู้ใช้จะกดENTER

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

5

ตามที่ชี้ให้เห็นโดยความคิดเห็นของmhawkeและstevehaคำตอบที่ดีที่สุดสำหรับคำถามนี้คือ:

สำหรับบล็อกข้อความที่ยาวแนะนำให้ใช้input('Press <ENTER> to continue')(หรือraw_input('Press <ENTER> to continue')บน Python 2.x) เพื่อเตือนผู้ใช้มากกว่าการหน่วงเวลา ผู้อ่านที่รวดเร็วไม่ต้องการรอช้าผู้อ่านที่ช้าอาจต้องการเวลามากขึ้นในการล่าช้าบางคนอาจถูกขัดจังหวะในขณะที่อ่านและต้องการเวลามากขึ้น ฯลฯ นอกจากนี้หากมีคนใช้โปรแกรมมากเขา / เธออาจคุ้นเคยกับการทำงานและไม่จำเป็นต้องอ่านข้อความยาว ๆ เป็นเรื่องง่ายที่จะให้ผู้ใช้ควบคุมว่าจะแสดงบล็อคข้อความเป็นระยะเวลาเท่าใด


5

ง่ายมาก:

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

ฉันใช้วิธีนี้เล็กน้อย แต่ฉันก็ชอบที่จะใช้มันเป็นฟังก์ชั่นหยุดชั่วคราว () และฉันไม่คิดว่าจะต้องออก () def pause (): return raw_input ("กด Enter เพื่อดำเนินการต่อ ... ")
jacktrader

NameError: name 'raw_input' is not defined
bers


0

ฉันคิดว่าวิธีที่ดีที่สุดในการหยุดการประมวลผลคือฟังก์ชั่น time.sleep () หากคุณต้องการระงับการดำเนินการเฉพาะในบางกรณีคุณสามารถใช้คำสั่ง if หากเป็นเช่นนี้:

if somethinghappen:
    time.sleep(seconds)

คุณสามารถปล่อยให้สาขาอื่นว่าง


0

ฉันคิดว่าฉันชอบโซลนี่

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

มันซ่อนสิ่งที่ผู้ใช้พิมพ์ซึ่งจะช่วยให้ชัดเจนว่าการป้อนข้อมูลไม่ได้ใช้ที่นี่

แต่ระวังในแพลตฟอร์ม OSX มันจะแสดงกุญแจที่อาจทำให้เกิดความสับสน

มันแสดงให้เห็นถึงกุญแจอย่างที่ฉันพูด


อาจเป็นทางออกที่ดีที่สุดคือการทำสิ่งที่คล้ายกับโมดูล getpass ด้วยตัวคุณเองโดยไม่ต้องread -sโทรออก อาจจะทำให้สี fg ตรงกับ bg?


0

ด้วยวิธีนี้คุณสามารถใช้งานโปรแกรมของคุณต่อได้โดยกดปุ่มใดก็ได้ที่ระบุไว้ซึ่งคุณได้ระบุไว้ว่า:

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

วิธีเดียวกัน แต่ในอีกทางหนึ่ง:

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

หมายเหตุ: คุณสามารถติดตั้งkeyboardโมดูลได้ง่ายๆโดยเขียนสิ่งนี้ลงในเชลล์หรือ cmd:

pip install keyboard


-1

สำหรับการทำงานร่วมกันระหว่าง Python 2/3 คุณสามารถใช้งานได้inputผ่านsixห้องสมุด:

import six
six.moves.input( 'Press the <ENTER> key to continue...' )
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.