0x01 前言

在大家买买买的当天,我依旧按计划上线直播。可是!这次直播是有抽奖环节的,但我并没有准备抽奖用的软件,也信不过别人写的软件,所以自己写一个是唯一的出路。

因为时间的关系,我只有半小时编写和测试。各种酷炫的视图时没有的,只有白底黑字的CLI。

以下是这次直播抽奖的相关信息,文章底部有抽奖的结果:

0x02 思路

需要实现的功能很简单,只需要从一个文本文档里抽出3个电子邮箱即可。为提高可信度,需要在展示结果前将报名的人都打印出来。

最重要的是隐私保护,毕竟直播之后会将录像上传到各大网站,如果将报名者的邮箱直接公布出来就不太好了。

要怎样实现随机抽取的功能?这个我就不折腾了,用python的random库即可。

0x03 脚本

脚本不长不短,一共38行,其中包含输入内容的参数组合,首先是接收传入的参数,并读取文件:

#!/usr/bin/python3

import sys
import random

# 接受传入参数
draw_user_file_path = sys.argv[1]
prize_num = sys.argv[2]

# 读取参与者邮箱列表文件
r = open(draw_user_file_path, 'r')
user_list = r.readlines()
r.close()

这个脚本需要传入2个参数,第一个是文本文档的路径,第二个是一个数字。当执行脚本后,输出的结果是这样的:

[root@web tmp]# ./main.py 1.txt 1
参与奖品编号为:1 的抽奖参与者邮箱列表:
--------------------
参与者:****[email protected]
参与者:****[email protected]
参与者:****[email protected]
参与者:****[email protected]
参与者:****[email protected]
参与者:****[email protected]
--------------------

上面的代码读取文件后,得出的结果是一个列表,所以遍历该列表,再组合成需要的内容即可打印到终端上:

# 打印参与者列表
print('参与奖品编号为:' + str(prize_num) + ' 的抽奖参与者邮箱列表:')
print('-' * 20)
for i in user_list:
    print('参与者:' + '****' + i[3:].strip('\n'))
print('-' * 20 + '\n' * 2)

其实参与者列表的打印和抽奖并没有什么关系,抽奖还是会用从文件中读取到的原始内容:

# 抽奖开始
print('抽奖开始!')
print('-' * 20)
i = 0
while i < 3:
    lucky_user = random.choice(user_list)
    user_list_input = user_list.remove(lucky_user)

    if i == 0:
        print('中奖者为:' + '****' + lucky_user[3:-1])
    elif i == 1:
        print('候选中奖者1为:' + '****' + lucky_user[3:-1])
    else:
        print('候选中奖者2为:' + '****' + lucky_user[3:-1])
    i += 1
print('-' * 20)
print('抽奖结束!' + '\n' * 2)

这里使用循环实现抽取1为中奖者与2位候选人,然后组合相应的内容并打印。

至此,整个脚本就完成了,最终执行的结果是这样的:

[root@web tmp]# ./main.py 1.txt 1
参与奖品编号为:1 的抽奖参与者邮箱列表:
--------------------
参与者:****[email protected]
参与者:****[email protected]
参与者:****[email protected]
参与者:****[email protected]
参与者:****[email protected]
参与者:****[email protected]
--------------------


抽奖开始!
--------------------
中奖者为:****[email protected]
候选中奖者1为:****[email protected]
候选中奖者2为:****[email protected]
--------------------
抽奖结束!

 

0x04 结语

简简单单的,就是差一点酷炫的滚动效果。有时间再更新,没更新继续用也行,毕竟基本功能已经实现了。

通过以下地址可以找到最新的脚本源码: