由於某學習平台屏蔽了腾訊雲和阿里雲這兩家服務商的 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/sh
cd {填你的路徑}/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"
編輯完成後按組合鍵 Ctrl+O
回車保存,然後就可以重啟樹莓派了,重啟後在終端輸入
screen -r chaoxing
查看腳本是否運行正常
(擴展)僅有簽到時通過 Server 醬通知#
2021 年 9 月 17 日:不是很懂 python,改了過後貌似簽到成功了也不會通知。
腳本默認在每次運行時都會進行通知,頻率很高非常煩人。所以做此修改。
修改 chaoxing_auto_sign\local\message.py
的代碼為
from datetime import datetime
import aiohttp
from config import SERVER_CHAN_SEND_KEY
async 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