Python programını duraklatmanın doğru yolu


161

Bu inputişlevi komut dosyalarımı duraklatmanın bir yolu olarak kullanıyorum

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

Bunu yapmanın resmi bir yolu var mı?


2
Bir hata ayıklayıcıda çalışın ve kesme noktaları mı kullanıyorsunuz?
gddc

Yanıtlar:


219

Bana iyi geliyor (veya raw_input()Python 2.X'te). Alternatif olarak time.sleep(), belirli bir süre duraklamak istiyorsanız da kullanabilirsiniz .

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

1
Zaman modülündeki uyku fonksiyonunu biliyorum ama uzun bir metin bloğum varsa kullanıcının okumasını istiyorum?
RandomPhobia

7
printUzun metin bloğunu görüntülemek için kullanın ve ardından Python sürümünüze uygun olarak input()veya raw_input('Press <ENTER> to continue')uygun şekilde kullanın.
mhawke

8
Uzun bir metin bloğu için, zaman gecikmesi yerine kullanıcıyı istemek input()(veya raw_input()Python 2.x'de) kullanmak en iyisidir . Hızlı okuyucular gecikmeyi beklemek istemez, yavaş okuyucular gecikmede daha fazla zaman isteyebilir, birisi okurken kesintiye uğrayabilir ve çok daha fazla zaman isteyebilir, vb. Ayrıca, birisi programı çok kullanırsa, nasıl çalıştığına alışık olabilir ve uzun metni bile okumasına gerek yoktur. Kullanıcının metin bloğunun okuma için ne kadar süre görüntüleneceğini kontrol etmesine izin vermek daha dostudur.
steveha

30

Yalnızca pencereler için :

import os
os.system("pause")

23
Bu, Windows'a özgüdür, ancak mevcut yanıtların tümü platformdan bağımsızdır.
lvc


17

Bu yüzden, kodlama çabalarımda çok iyi çalıştığını buldum. Ben sadece bir işlev yarattı , çok programımın başlayarak her yıl

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

ve şimdi pause()bir toplu iş dosyası yazıyormuşum gibi bu işlevi kullanabilmem gerekiyor. Örneğin , böyle bir programda:

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

Şimdi açıkçası bu programın bir amacı yoktur ve sadece örnek amaçlıdır, ama ne demek istediğimi tam olarak anlayabilirsiniz.

NOT: Python 3 için, inputaksineraw_input


7

Benzer bir sorum vardı ve sinyal kullanıyordum:

import signal

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

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

Böylece SIGINT sinyali için bir işleyici kaydedersiniz ve herhangi bir sinyali beklerken duraklarsınız. Şimdi programınızın dışından (örneğin bash), kill -2 <python_pid>python programınıza sinyal 2 (yani SIGINT) gönderecek şekilde çalıştırabilirsiniz . Programınız kayıtlı işleyicinizi arayacak ve çalışmaya devam edecektir.


2
Bunun platformlar arasında taşınabilir olmadığını unutmayın, ör. Windows üzerinde yok signal.pause.
kyrill

7

pythonKullanıcı basana kadar kod yürütmeyi duraklatmak için 2 ve 3 için aşağıdakileri kullanıyorumENTER

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

5

Tarafından sivri dışarı olarak mhawke ve steveha 'ın yorum, tam da bu soruya en iyi cevabı şöyle olacaktır:

Uzun bir metin bloğu için, zaman gecikmesi yerine kullanıcıyı istemek input('Press <ENTER> to continue')(veya raw_input('Press <ENTER> to continue')Python 2.x'de) kullanmak en iyisidir . Hızlı okuyucular gecikmeyi beklemek istemez, yavaş okuyucular gecikmede daha fazla zaman isteyebilir, birisi okurken kesintiye uğrayabilir ve çok daha fazla zaman isteyebilir, vb. Ayrıca, birisi programı çok kullanırsa, nasıl çalıştığına alışık olabilir ve uzun metni bile okumasına gerek yoktur. Kullanıcının metin bloğunun okuma için ne kadar süre görüntüleneceğini kontrol etmesine izin vermek daha dostudur.


5

Çok basit:

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

Bu yöntemi biraz kullandım, ancak aynı zamanda bir pause () işlevi olarak kullanmayı seviyorum ve exit () için bir ihtiyaç olduğunu düşünmüyorum. def pause (): return raw_input ("
Devam

NameError: name 'raw_input' is not defined
bers


0

idam durdurmanın en iyi yolu time.sleep () işlevi olduğunu düşünüyorum. yürütmeyi yalnızca belirli durumlarda askıya almanız gerekirse, şöyle bir if ifadesini uygulayabilirsiniz:

if somethinghappen:
    time.sleep(seconds)

diğer dalı boş bırakabilirsiniz.


0

Sanırım bu çözümü seviyorum.

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

Kullanıcının yazdığı her şeyi gizler, bu da girdinin burada kullanılmadığını netleştirmeye yardımcı olur.

Ancak OSX platformunda dikkatli olun, kafa karıştırıcı olabilecek bir anahtar görüntüler.

Dediğim gibi bir anahtar gösteriyor


Muhtemelen en iyi çözüm, read -sarama yapmadan getpass modülüne benzer bir şey kendiniz yapmak olacaktır . Belki fg renginin bg ile eşleşmesi?


0

Bu yöntemle, yalnızca belirttiğiniz herhangi bir tuşa basarak programınıza devam edebilirsiniz:

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

aynı yöntem ancak başka bir şekilde:

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

Not: keyboardsadece kabuk veya cmd'ye yazarak modülü kurabilirsiniz :

pip install keyboard

0
import os, sys

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

-1

Çapraz Python 2/3 uyumluluğu inputiçin sixkütüphane üzerinden kullanabilirsiniz :

import six
six.moves.input( 'Press the <ENTER> key to continue...' )
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.