Saya ingin skrip saya menunggu sampai pengguna menekan tombol apa saja.
Bagaimana aku melakukan itu?
python
wait
keyboard-input
Janusz
sumber
sumber
input
tidak melanjutkan jika ada tombol yang ditekan, hanya jika enter ditekan.Salah satu cara untuk melakukan ini dalam Python 2, adalah dengan menggunakan
raw_input()
:Dalam python3 hanya saja
input()
sumber
enter
?input()
.from six.moves import input; input("Press Enter to continue...")
Di kotak linux saya, saya menggunakan kode berikut. Ini mirip dengan kode yang pernah saya lihat di tempat lain (dalam python lama FAQs misalnya) tetapi kode itu berputar dalam loop ketat di mana kode ini tidak dan ada banyak kasus sudut aneh bahwa kode tidak menjelaskan bahwa ini kode tidak.
sumber
Jika Anda setuju dengan tergantung pada perintah sistem Anda dapat menggunakan yang berikut:
Linux:
Windows:
sumber
system
dan kemudian meneleponsys.exit(0)
.Cukup menggunakan
akan menyebabkan SyntaxError: EOF yang diharapkan saat parsing.
Penggunaan perbaikan sederhana:
sumber
input
di python 2 - fungsi yang benar adalahraw_input
. Dalam python 2,input
sama denganeval(raw_input())
.Manual python menyediakan yang berikut:
yang dapat digulung ke dalam use case Anda.
sumber
Cross Platform, kode Python 2/3:
Saya menghapus hal-hal fctl / non-blocking karena memberi
IOError
dan saya tidak membutuhkannya. Saya menggunakan kode ini secara khusus karena saya ingin memblokirnya. ;)Tambahan:
Saya menerapkan ini dalam sebuah paket di PyPI dengan banyak barang lain yang disebut konsol :
sumber
Saya tidak tahu cara platform independen untuk melakukannya, tetapi di bawah Windows, jika Anda menggunakan modul msvcrt, Anda dapat menggunakan fungsi getch-nya:
mscvcrt juga menyertakan fungsi kbhit () non-blocking untuk melihat apakah suatu tombol ditekan tanpa menunggu (tidak yakin apakah ada fungsi kutukan yang sesuai). Di bawah UNIX, ada paket kutukan, tetapi tidak yakin apakah Anda dapat menggunakannya tanpa menggunakannya untuk semua output layar. Kode ini berfungsi di bawah UNIX:
Perhatikan bahwa curses.getch () mengembalikan ordinal tombol yang ditekan sehingga untuk membuatnya memiliki output yang sama saya harus melemparkannya.
sumber
Jika Anda ingin menunggu untuk masuk (sehingga pengguna mengetuk keyboard tidak menyebabkan sesuatu yang tidak diinginkan terjadi) gunakan
sumber
Saya baru mengenal python dan saya sudah berpikir saya terlalu bodoh untuk mereproduksi saran sederhana yang dibuat di sini. Ternyata, ada jebakan yang harus diketahui:
Ketika skrip python dijalankan dari IDLE, beberapa perintah-IO tampaknya berperilaku sangat berbeda (karena sebenarnya tidak ada jendela terminal).
Misalnya. msvcrt.getch adalah non-blocking dan selalu mengembalikan $ ff. Ini sudah dilaporkan sejak lama (lihat mis. Https://bugs.python.org/issue9290 ) - dan ditandai sebagai diperbaiki, entah bagaimana masalahnya tetap ada di versi python / IDLE saat ini.
Jadi jika salah satu kode yang diposting di atas tidak berfungsi untuk Anda, coba jalankan skrip secara manual, dan BUKAN dari IDLE .
sumber
Jika Anda ingin melihat apakah mereka menekan tombol yang tepat (seperti katakan 'b') Lakukan ini:
sumber
os.sistem tampaknya selalu memanggil sh, yang tidak mengenali opsi s dan n untuk dibaca. Namun perintah baca dapat diteruskan ke bash:
sumber