【工作中的Python】隨機點名小腳本


背景:項目組每周的例會中,有一項固定內容就是技術分享,可以是與工作相關或無關的任何技術主題。進行技術分享講解的同學是隨機抽簽的。由此做了一個Python的小腳本用於抽取姓名。

腳本內容如下:

#!/usr/bin/python

import os
import sys
import tty, termios
import random

name_list = ["member_1","member_2","member_3"]
input = ''
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)

try:
    tty.setraw(fd)
    while 'q' != input:
        sys.stdout.write(random.choice(name_list) + "\r\n")
        input = sys.stdin.read(1)
finally:
    termios.tcgetattr(fd, termios.TCSADRAIN, old_settings)

代碼說明:

隨機選擇

        $ random.choice從序列中獲取一個隨機元素。

        $ 其函數原型為:random.choice(sequence)。參數sequence表示一個有序類型。

        $ sequence在python不是一種特定的類型,而是泛指一系列的類型。list, tuple, 字符串都屬於sequence。

文件描述符

        $ 獲取底層實現使用請求從操作系統的I / O操作的文件描述符:

fileObject.fileno(); 

 

        $ 腳本中獲取了標准輸入(終端)的文件描述符,后續用於獲取輸入和向屏幕輸出。其實讀取標准輸入的話,我更喜歡用raw_input()這個函數,不過反正都實現了。輸入的時候使用了sys.stdout.write()的原因是,在通過termios改變了終端的屬性后,使用print輸出時格式會發生變化——如果抽取多次,則每次輸出的名字都會在前次輸出的下一行並后延一個tab的位置,造成錯位,不知道為什么。采用了sys.stdout.write()后就正常了。

Termios與tty模塊

        $ (只能在Unix及其派生的系統中使用)這兩個模塊配合是為了實現程序實時響應用戶的鍵盤輸入。運行程序時,輸入‘q'則直接退出程序,而不需要按下回車。

        $ 首先獲取當前終端配置

old_settings = termios.tcgetattr(fd)

 

        $ 設置終端為非阻塞的輸入方式,按字符響應鍵盤輸入

tty.setraw(fd)

 

        $ 還原終端配置

termios.tcgetattr(fd, termios.TCSADRAIN, old_settings)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM