Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การควบคุม POSIX Style TTY โดยใช้ Python


โมดูล termios จัดเตรียมอินเทอร์เฟซไปยัง POSIX สำหรับการควบคุม tty I/O ใช้ได้เฉพาะกับระบบ Unix เท่านั้น

ในการใช้โมดูลเทอร์มิโอ เราควรนำเข้าโดยใช้ −

import termios

วิธีการทั้งหมดในโมดูลนี้ ใช้ file descriptor เป็นอาร์กิวเมนต์ มีบางโมดูลของโมดูลเทอร์มิโอ เหล่านี้คือ −

วิธีการ termios.tcgetattr(fd)

เมธอดนี้ส่งคืนรายการแอตทริบิวต์ tty สำหรับ file descriptor ที่กำหนด คุณลักษณะ ได้แก่ iflag, oflag, cflag, lflag, ispeed, ospeed, cc.

วิธีการ termios.tcsetattr(fd เมื่อ คุณลักษณะ)

วิธีนี้ใช้เพื่อตั้งค่าแอตทริบิวต์จากรายการแอตทริบิวต์ อาร์กิวเมนต์ที่สองกำหนดเมื่อแอตทริบิวต์จะถูกเปลี่ยน มีค่าคงที่บางส่วนสำหรับส่วนเมื่อ เหล่านี้คือ −

ซีเนียร์ เมื่อคุณลักษณะและความหมาย
1

TCSANOW

เปลี่ยนแอตทริบิวต์ทันที

2

TCSADRAIN

เปลี่ยนแอตทริบิวต์หลังจากส่งสัญญาณออกที่จัดคิวทั้งหมด

3

TCSAFLUSH

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

วิธีการ termios.tcsendbreak(fd ระยะเวลา)

มันส่งตัวแบ่งไฟล์อธิบาย เมื่อระยะเวลาเป็นศูนย์ จะส่งช่วงพัก 0.25-0.5 วินาที

วิธีการ termios.tcdrain(fd)

วิธีนี้ใช้เพื่อรอจนกว่าเอาต์พุตทั้งหมดที่เขียนไปยัง file descriptor

วิธีการ termios.tcflush(fd, คิว)

วิธีนี้ใช้ทิ้งข้อมูลคิวใน fd ตัวเลือกคิวอยู่ที่นั่นเพื่อระบุว่าจะดำเนินการกับคิวใด TCIFLUSH ใช้สำหรับอินพุตคิวและ TCOFLUSH สำหรับเอาต์พุตคิว และ TCIOFLUSH สำหรับทั้งคู่

โค้ดตัวอย่าง

import termios, sys
def get_password(prompt= "Enter Password: "):
   file_desc = sys.stdin.fileno()
   old_pass = termios.tcgetattr(file_desc)
   new_pass = termios.tcgetattr(file_desc)
   new_pass[3] & = ~termios.ECHO
   try:
      termios.tcsetattr(file_desc, termios.TCSADRAIN, new_pass)
      password = input(prompt)
   finally:
      termios.tcsetattr(file_desc, termios.TCSADRAIN, old_pass)
   return password

ผลลัพธ์

$ python3 example.py
Enter Password:
Entered Password: my_password