在树莓派上挂自挂签到脚本
2021年09月16日 774 字 大概 3 分钟
由于某学习平台屏蔽了腾讯云和阿里云这两家服务商的 IP,我就把我15年买的古董树莓派3B翻了出来用来跑脚本。
由于我的树莓派不是全天24小时供电的,不能保证永久在线,所以我希望开机就自动启动的我脚本。
然后我希望我的脚本仅在有签到的时候通过Server酱通知我。
刷入系统
SD卡这东西说实话在如今已经很少见了,我在家到处翻才翻到一张杂牌的8G卡,不过能用就行,现在树莓派刷入系统真方便,直接用官方的软件就行。
干掉 Python2 换上 Python3
正当我以为能直接跑脚本的时候 ,我才知道树莓派默认用的 Python2,所以第二步就是干掉 Python2 换上 Python3 了,终端中运行
sudo apt remove python # 卸载 Python2 sudo apt autoremove # 清理 Python2 |
---|
sudo apt install python3 # 一般系统已经有 Python3 了,这步可以跳过sudo ln -s /usr/bin/python3.7 /usr/bin/python # 创建一个新的链接指向 Python3 |
---|
Clone 脚本
git clone https://hub.fastgit.org/mkdir700/chaoxing_auto_sign.git # 用的 Github 加速源 |
---|
配置脚本并运行测试
进入 chaoxing_auto_sign/local/config.py
对脚本进行配置
然后在终端中 cd {填你的路径}/chaoxing_auto_sign/local/
并使用 python main.py timing
运行脚本进行测试。
一切就绪,开始进入本文的重头戏。
安装 Screen
终端中运行
sudo apt install screen |
---|
开机自动运行脚本
在 /home/pi/Desktop/
新建 start.sh
方便编辑查找,内容如下
#!/bin/sh CreateScreen(){ screen -dmS $1 screen -x -S $1 -p 0 -X stuff "$2" screen -x -S $1 -p 0 -X stuff 'n'}CreateScreen "chaoxing" "/home/pi/Desktop/chaoxing.sh" |
---|
在 /home/pi/Desktop/
新建 chaoxing.sh
方便编辑查找,内容如下
#!/bin/shcd {填你的路径}/chaoxing_auto_sign/local/python main.py timing |
---|
终端中运行
sudo nano /etc/rc.local |
---|
在 exit 0
上插入如下代码以让系统在启动时自动运行 start.sh
su pi -c "exec /home/pi/Desktop/start.sh" |
---|
然后就可以重启树莓派了,重启后在终端输入
screen -r chaoxing |
---|
查看脚本是否运行正常
(扩展)仅有签到时通过Server酱通知
脚本默认在每次运行时都会进行通知,频率很高非常烦人。所以做此修改。
修改 chaoxing_auto_signlocalmessage.py
的代码为
from datetime import datetimeimport aiohttpfrom config import SERVER_CHAN_SEND_KEYasync def server_chan_send(dataset): """server酱将消息推送""" if SERVER_CHAN_SEND_KEY == '': return msg = ("| 账号 | 课程名 | 签到时间 | 签到状态 |n" "| :----: | :----: | :------: | :------: |n") msg_template = "| {} | {} | {} | {} |" for datas in dataset: if datas: for data in datas: msg = msg_template.format(data['username'], data['name'], data['date'], data['status']) params = { 'title': msg, 'desp': msg } async with aiohttp.ClientSession() as session: async with session.request( method="GET", url="https://sctapi.ftqq.com/{}.send?title=messagetitle".format(SERVER_CHAN_SEND_KEY), params=params ) as resp: text = await resp.text() else: msg = "当前暂无签到任务!{}".format(datetime.now().strftime('%Y年%m月%d日 %H:%M:%D')) break |
---|