โมดูล tty ควบคุม Terminal Mode ใน UNIX: ตั้งค่า Raw Mode และ Cbreak Mode เพื่ออ่าน Input ทันทีไม่ต้องกด Enter
import tty (ต้องใช้ร่วม termios)
โหมด Terminal
| โหมด | คุณสมบัติ |
|---|---|
| Raw Mode |
|
| Cbreak Mode |
|
เมธอดหลัก
tty.setraw(fd, when=termios.TCSAFLUSH)
ตั้งค่า Raw Mode
tty.setcbreak(fd, when=termios.TCSAFLUSH)
ตั้งค่า Cbreak Mode
when Parameter (จาก termios):
TCSANOW- ใช้ทันทีTCSADRAIN- รอ Output หมดก่อนTCSAFLUSH- รอ Output หมด + Flush Input (Default)
โค้ดตัวอย่าง: อ่านตัวอักษรทีละตัว
import sys
import tty
import termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(fd)
print("Press 5 keys (no Enter needed):")
for i in range(5):
ch = sys.stdin.read(1)
print(f"Char: {repr(ch)}")
finally:
# คืนค่า Terminal Settings เดิม (สำคัญมาก!)
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
ผลลัพธ์
Press 5 keys (no Enter needed): Char: 'K' Char: 'E' Char: '5' Char: '2' Char: '@'
กรณีใช้งานจริง
- Password Input (ไม่แสดงตัวอักษร - ใช้ร่วม termios.ECHO)
- Game/Interactive CLI (Real-time Key Press)
- Menu Navigation (Arrow Keys)
- REPL/Shell Development
⚠️ ข้อควรระวังสำคัญ
- ต้อง Restore Settings เสมอ - ใช้ try/finally ไม่เช่นนั้น Terminal จะค้าง Raw Mode
- Windows: ใช้
msvcrt.getch()แทน - Signal Handling: Raw Mode ปิด Ctrl+C ต้องจัดการเอง