Pythonプログラムを一時停止する正しい方法


161

inputスクリプトを一時停止する方法として関数を使用しています

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

これを行う正式な方法はありますか?


2
デバッガで作業してブレークポイントを使用しますか?
gddc 2012

回答:


219

私(またはraw_input()Python 2.X)には問題ないようです。あるいはtime.sleep()、特定の秒数の間一時停止したい場合に使用できます。

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

1
時間モジュールのスリープ機能について知っていますが、テキストの長いブロックがある場合、ユーザーに読んでもらいたいですか?
RandomPhobia 2012

7
を使用printして、長いテキストブロックを表示し、Pythonのバージョンに応じて、input()またはraw_input('Press <ENTER> to continue')適切に表示します。
mhawke '19

8
テキストの長いブロックの場合は、遅延時間ではなく、input()(またはraw_input()Python 2.xで)ユーザーにプロンプ​​トを表示することをお勧めします。速い読者は遅延を待たないでしょう、遅い読者は遅延にもっと時間を必要とするかもしれません、誰かがそれを読んでいる間に中断されてもっと多くの時間を欲するかもしれません。彼女はそれがどのように機能するかに慣れ、長いテキストを読む必要すらなくなるかもしれません。ユーザーがテキストブロックを読み取り用に表示する時間を制御できるのは、とても親しみやすいです。
steveha 2012

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の場合はinputraw_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
キリル

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

mhawkestevehaのコメントで指摘されているように、この正確な質問に対する最良の答えは次のとおりです。

テキストの長いブロックの場合は、遅延時間ではなく、input('Press <ENTER> to continue')(またはraw_input('Press <ENTER> to continue')Python 2.xで)ユーザーにプロンプ​​トを表示することをお勧めします。速い読者は遅延を待たないでしょう、遅い読者は遅延にもっと時間を必要とするかもしれません、誰かがそれを読んでいる間に中断されてもっと多くの時間を欲するかもしれません。彼女はそれがどのように機能するかに慣れ、長いテキストを読む必要すらなくなるかもしれません。ユーザーがテキストブロックを読み取り用に表示する時間を制御できるのは、とても親しみやすいです。


5

非常にシンプル:

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

このメソッドを少し使用しましたが、pause()関数として使用することも好きで、exit()の必要性はないと思います。def pause():return raw_input( "Enterを押して続行...")
jacktrader

NameError: name 'raw_input' is not defined
BERを


0

実行を停止する最善の方法は、time.sleep()関数だと思います。特定の場合にのみ実行を一時停止する必要がある場合は、次のようなifステートメントを実装するだけです。

if somethinghappen:
    time.sleep(seconds)

elseブランチを空のままにすることができます。


0

私はこのソルンが好きだと思います。

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

ユーザーが入力したものはすべて非表示になるため、ここでは入力が使用されていないことが明確になります。

ただし、OSXプラットフォームでは、混乱を招く可能性のあるキーが表示されることに注意してください。

私が言ったように、それは鍵を示しています


おそらく、最善の解決策は、read -s呼び出しを行わずにgetpassモジュールと同様のことを自分で行うことです。たぶん、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.