使用 Python 进行 POSIX 样式 TTY 控制
termios 模块提供了一个与 POSIX 终端 I/O 控制的接口。它仅适用于 Unix 系统。
要使用 termios 模块,我们应该使用以下方法导入它:
import termios
此模块中的所有方法都将文件描述符作为参数。termios 模块有一些方法,它们是:
方法 termios.tcgetattr(fd)
此方法返回给定文件描述符的 tty 属性列表。属性包括 iflag、oflag、cflag、lflag、ispeed、ospeed、cc。
方法 termios.tcsetattr(fd, when, attributes)
此方法用于从属性列表中设置属性。第二个参数确定何时更改属性。when 部分有一些常量。它们是:
| 序号 | When 属性 & 含义 |
|---|---|
| 1 | TCSANOW 立即更改属性 |
| 2 | TCSADRAIN 传输所有排队的输出后更改属性 |
| 3 | TCSAFLUSH 传输所有排队的输出后更改属性,并丢弃所有排队的输入。 |
方法 termios.tcsendbreak(fd, duration)
它在文件描述符上发送中断信号。当持续时间为零时,它会发送 0.25-0.5 秒的中断信号。
方法 termios.tcdrain(fd)
此方法用于等待直到所有输出写入文件描述符。
方法 termios.tcflush(fd, queue)
此方法用于丢弃 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
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP