Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python을 사용한 POSIX 스타일 TTY 제어

<시간/>

termios 모듈은 tty I/O 제어를 위해 POSIX에 대한 인터페이스를 제공합니다. Unix 시스템에서만 사용할 수 있습니다.

termios 모듈을 사용하려면 −

를 사용하여 가져와야 합니다.
import termios

이 모듈의 모든 메서드는 파일 설명자를 인수로 사용합니다. termios 모듈에는 다음과 같은 몇 가지 모듈이 있습니다.

메소드 termios.tcgetattr(fd)

이 메소드는 주어진 파일 디스크립터에 대한 tty 속성 목록을 리턴합니다. 속성은 iflag, oflag, cflag, lflag, ispeed, ospeed, cc입니다.

메서드 termios.tcsetattr(fd, when, 속성)

이 메소드는 속성 목록에서 속성을 설정하는 데 사용됩니다. 두 번째 인수는 속성이 변경되는 시기를 결정합니다. when 섹션에는 몇 가지 상수가 있습니다. 이들은 -

시니어 번호 속성 및 의미가 있는 경우
1

TCSANOW

즉시 속성 변경

2

TCSADRIN

대기 중인 모든 출력을 전송한 후 속성 변경

3

TCSAFLUSH

대기 중인 모든 출력을 전송한 후 속성을 변경하고 대기 중인 모든 입력을 버립니다.

메서드 termios.tcsendbreak(fd, 기간)

파일 설명자에 중단을 보냅니다. 지속 시간이 0이면 0.25-0.5초 동안 휴식을 보냅니다.

메소드 termios.tcdrain(fd)

이 메소드는 모든 출력이 파일 디스크립터에 기록될 때까지 대기하는 데 사용됩니다.

메서드 termios.tcflush(fd, queue)

이 방법은 fd의 큐 데이터를 버리는 데 사용됩니다. 대기열 선택기는 수행될 대기열을 지정하기 위해 있습니다. 티플러시 입력 대기열 및 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