【计算机专业学习委员必备自动化催作业通知】

文章目录

  • 前言
  • 一、前期准备
    • zfile部署
    • mysql服务搭建
  • 二、编写python脚本
    • python代码
  • 三、总结


前言

大家好!我是一名计算机专业的菜鸟,作为这个专业的学习委员,我觉得收电子版作业是一件非常麻烦的事情,作业实验科目也比较多,一到了要交实验报告的时候,我的QQ,微信都是他们发作业的消息,有时候可能还忘了收别人早就发给我的作业了,我就在想,有没一种收作业的软件或者网站,最好还能自动qq邮件提醒那些没交作业的同学,后来我了解到了一个开源的网盘叫做zfile,作为大学生有免费的10个月左右的阿里云服务器,领取之后就把这个项目部署到我的阿里云服务器,数据就放在我的某个目录下,通过写python程序监控该目录,没交作业的就自动发邮件去提醒。

网站大致就是如图:

在这里插入图片描述
服务器中的数据目录:

在这里插入图片描述

一、前期准备

一、准备一台云服务器,如果是大学生的话,阿里云免费送几个月的云服务器使用权,2核2G的完全够用了。
二、你需要了解到一些docker,mysql,linux的相关知识,通过docker可以快速部署服务。

zfile部署

zfile官网:https://docs.zfile.vip/
一、概述
基于 Java 的在线网盘程序,支持对接 S3、OneDrive、SharePoint、又拍云、本地存储、FTP 等存储源,支持在线浏览图片、播放音视频,文本文件等文件类型。
二、安装部署
在这之前你需要安装好了docker,如果想了解docker安装可以去看我以前的博客:https://blog.csdn.net/qq_62331653/article/details/135596921?spm=1001.2014.3001.5502

Docker 镜像托管在 DockerHub:https://hub.docker.com/r/zhaojun1998/zfile
[root@gang ~]# docker search zfile   #查看zfile的镜像仓库
[root@gang ~]# docker pull zhaojun1998/zfile   #拉取镜像
[root@gang ~]# docker images     #查看你的镜像

在这里插入图片描述

docker run -d --name=zfile --restart=always \
    -p 8080:8080 \
    -v /root/zfile/db:/root/.zfile-v4/db \
    -v /root/zfile/logs:/root/.zfile-v4/logs \
    -v /root/zfile/file:/data/file \
    zhaojun1998/zfile

zfile容器运行之后,可以通过阿里云的这个服务器ip地址访问,如果打不开的话,去阿里云网站上去把8080端口加入到安全组,这个时候就可以访问了,这个时候进行一系列的配置,你的本地数据目录填/data/zfile。
在这里插入图片描述
这样zfile服务算是搭建完成。

mysql服务搭建

[root@gang ~]# docker pull mysql:5.7   #拉取mysql:5.7的镜像
docker run -id --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7    #后台运行
docker exec -it mysql env LANG=C.UTF-8 /bin/bash   #进入容器

mysql搭建完成,需要在mysql中,建库建表来保存自己班上的学生信息。如果用代码连接不到数据库,同样也要去阿里云网站上去把3306端口加入到安全组

二、编写python脚本

在编写python脚本之前,我们需要设计如何写代码,如何取数据进行对比,数据库会保存班上的学生信息,例如学号,姓名,邮箱等等,在保存同学的数据目录下利用os.listdir(url)方法,列出当前的学生信息,然后与数据库进行对比,没有的就是没有交作业的,然后通过smtplib这个库中的方法给他发qq邮箱通知。

python代码

代码如下(示例):
需要哪些模块可以通过pip安装。

#! /usr/bin/python3.6
import mysql.connector
import os
import smtplib
from email.mime.text import MIMEText
def Mysql_part():
    mydb = mysql.connector.connect(
      host="ip地址",
      user="root",
      passwd="密码",
      port=3306,
      database="students"
    )
    mycursor = mydb.cursor()
    mycursor.execute("SELECT * FROM student")
    myresult = mycursor.fetchall()
    names = {}  #姓名qq字典
    for x in myresult:
        names[x[2]]=x[3]
    # print(names)
    return names
def view_current_file(url="/root/zfile/file"):   #存放学生作业数据的目录
    files = os.listdir(url)
    work_complete_num = 0    #作业完成总人数
    work_false = {}        #作业没完成的人
    for name in list(Mysql_part().keys()):
        exchange = False
        for file in files:
            if name in file:
                exchange = True
        if exchange==True:
            work_complete_num+=1
        else:
            work_false[name]=Mysql_part().get(name)
    return work_false,work_complete_num,     #返回没有交作业的人
# print(view_current_file())
def work_false_email(rece,name):
    sender = user = '309jjj@qq.com'  # 发送方的邮箱账号
    passwd = 'dddddddd'  # 授权码----->获取方法可以去百度,如何得到qq邮箱的授权码
    receiver = rece+"@qq.com"  # 接收方的邮箱账号,不一定是QQ邮箱
    # 纯文本内容
    msg = MIMEText(f'我说%s同学,你是不是还没交作业,你快去把作业交了!' % name, 'plain', 'utf-8')
    # From 的内容是有要求的,前面的abc为自己定义的 nickname,如果是ASCII格式,则可以直接写
    msg['From'] = '309hhhgff@qq.com'
    msg['To'] = receiver
    msg['Subject'] = '计科5班学委催作业通知'  # 点开详情后的标题
    try:
        # 建立 SMTP 、SSL 的连接,连接发送方的邮箱服务器
        smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)
        # 登录发送方的邮箱账号
        smtp.login(user, passwd)
        # 发送邮件 发送方,接收方,发送的内容
        smtp.sendmail(sender, receiver, msg.as_string())
        print('邮件发送成功')
        smtp.quit()
    except Exception as e:
        print(e)
        print('发送邮件失败')

if __name__ == '__main__':
    work_false = view_current_file()
    for name in list(work_false[0].keys()):
        value = work_false[0].get(name)
        work_false_email(value,name)
    print("当前交作业的人数:",work_false[1])
    separator = ", "
    print(work_false[0])
    result = separator.join(list(work_false[0].keys()))
    result = "当前没交作业的名单是:" + result
    print(result)
    import subprocess
    os.system('chattr -i zfile/file/作业未交名单.txt')   #做这个设置的原因是我不允许该文件可以被任何人删除
    file_path = "/root/zfile/file/作业未交名单.txt"  # 替换为实际的文件路径
    content = "交作业人数:"+str(work_false[1])+"人\n当前没交作业人数:"+str(len(work_false[0]))+"人\n"+result
    # 使用 subprocess 执行 echo 命令将内容写入文件
    subprocess.run(["bash", "-c", f"echo '{content}' > {file_path}"])
    os.system('chattr +i zfile/file/作业未交名单.txt')

效果展示图:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三、总结

通过本次的这个小项目,我学习到了很多,比如咋用程序自动发邮箱,怎么让没交作业名单这个文件不允许被删除,咋用python脚本运行linux中的shell脚本等,但是这个脚本虽然基本实现了我的功能,但是正真用的时候,可能满足不了需求,场景也会在变,但还好我基本可以实现这些小功能,到时候在变的时候在慢慢改代码,我觉得通过自己的专业知识,解决到生活中的小问题,真的挺开心的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/353674.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RLHF学习

整体流程 三个步骤分解: 预训练一个语言模型 (LM) ;聚合问答数据并训练一个奖励模型 (Reward Model,RM) ;用强化学习 (RL) 方式微调 LM。 RW RM 的训练是 RLHF 区别于旧范式的开端。这一模型接收一系列文本并返回一个标量奖励&…

探索Pyecharts关系图绘制技巧:炫酷效果与创意呈现【第42篇—python:Pyecharts水球图】

文章目录 Pyecharts绘制多种炫酷关系网图引言准备工作代码实战1. 基本关系网图2. 自定义节点样式和边样式3. 关系网图的层级结构4. 添加标签和工具提示5. 动态关系网图6. 高级关系网图 - Les Miserables 示例7. 自定义关系网图布局8. 添加背景图9. 3D 关系网图10. 热力关系网图…

使用PCL进行法向量可视化

使用PCL进行法向量可视化 文章目录 1、使用PCL进行法向量可视化2、计算所有点的法线并显示3、计算一个子集的法线 1、使用PCL进行法向量可视化 #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/visualization/pcl_visualizer.h> #include &l…

Qt使用中文字符串乱码的问题

文章目录 vs编译器下第一种解决方式第二种解决方式 Qt编译器下 我们在使用qt的时候有时候会遇到打印中文字符串的时候出现中文乱码的问题&#xff0c;主要是由于Qt的QString字符串存储的方式是使用utf-8的编码方式&#xff0c;如果我们本地的文件是使用GBK方式的编码再使用中文…

DAY09_SpringBoot—整合SpringMVCSpringMVC参数取值用法

目录 1 SpringMVC1.1 SpringMVC框架介绍1.2 SpringMVC入门案例1.2.1 创建项目1.2.2 添加依赖项1.2.3 检查pom.xml文件1.2.4 编辑YML配置文件1.2.5 在templates中添加index.html文件1.2.6 默认页面跳转机制 1.3 RequestMapping注解测试1.3.1 编辑HelloController1.3.2 页面请求效…

【计算机网络】深入掌握计算机网络的核心要点(面试专用)

写在前面 前言四层模型网络地址管理Linux下设置ipARP请求包总结 前言 计算机网络是指将分散的计算机设备通过通信线路连接起来&#xff0c;形成一个统一的网络。为了使得各个计算机之间能够相互通信&#xff0c;需要遵循一定的协议和规范。OSI参考模型和TCP/IP参考模型是计算机…

32GPIO输入&按键控制LED&光敏控制蜂鸣器

一.硬件 光线越强&#xff0c;光敏电阻的阻值越小 温度越高&#xff0c;热敏电阻的阻值就越小 红外光线越强&#xff0c;红外接收管的阻值就越小 类比&#xff1a;电阻阻值越小&#xff0c;上拉或下拉就越强 &#xff08;弹簧的拉力就越强&#xff09; 在上下的电阻分压下&a…

FPGA HDMI IP之DDC(本质I2C协议)通道学习

目的&#xff1a; 使用KingstVIS逻辑分析仪软件分析HDMI的DDC通道传输的SCDC数据&#xff08;遵循I2C协议&#xff09;&#xff0c;同时学习了解SCDC的寄存器与I2C通信协议。 部分英文缩写&#xff1a; HDMIHigh Definition Multi-media Interface高清多媒体接口DDCDisplay Dat…

CSS基础细节学习

目录 一.CSS--网页的美容师 二.语法规范及选择器的介绍 一.CSS--网页的美容师 CSS是层叠样式表( Cascading Style Sheets )的简称&#xff0c;有时我们也会称之为CSS样式表或级联样式表。 CSS是也是一种标记语言&#xff0c;CSS主要用于设置HTML页面中的文本内容(字体、大小…

自定义实现 View.DragShadowBuilder 设置拖拽视图的大小

直接上刺刀 /*** Desc : 自定义拖拽视图的大小*/ public class CustomDragShadowBuilder extends View.DragShadowBuilder {private double mShadowSize;private Point mScaleFactor;/*** param view 需要拖拽的view* param shadowSize 拖拽视图的放大倍数*/public Cus…

CUDA下载安装教程,新手详细

目录 一、下载二、安装三、 设置环境变量四、补丁安装 由于项目需要安装特定版本的CUDA&#xff0c;现记录安装过程。 一、下载 进入官方下载地址&#xff1a;https://developer.nvidia.com/cuda-toolkit-archive 选择自己需要的版本。如果没有明确要求版本号&#xff0c;那么…

智能AI系统开发,专业软件硬件物联网开发公司,探索未来科技新纪元

在信息时代&#xff0c;人工智能&#xff08;AI&#xff09;、物联网等前沿技术日益受到人们的关注。智能AI系统、专业软件硬件物联网开发公司应运而生。今天&#xff0c;我们将向大家介绍一家位于XX城的专业公司&#xff0c;致力于智能AI系统开发和软件硬件物联网领域的创新研…

macOS系统鼠标变彩虹的解决办法(详细)

目录 第一步 打开活动监视器 第二步 找出【简体中文输入方式】这个进程 第三步 点击最上方的"X"按钮&#xff0c;选择"退出" 按钮 第一步 打开活动监视器 如果下方的任务栏没有显示&#xff0c;可以在左下角【启动台】-其他里打开 -- 第二步 找出【…

仰暮计划|“老师说我其实很聪明,就是家里太穷了没条件,不然我现在也是……”

吴桂荣老人回忆录 在我外婆家的时候&#xff0c;我跟几位老奶奶坐在门口一起聊天&#xff0c;我询问她们是否能帮助我完成一份作业&#xff0c;她们笑着答应了&#xff0c;最后我选择了其中的一位老奶奶作为了解对象&#xff0c;她邀请我去家中交谈。通过了解&#xff0c;我得知…

PyTorch深度学习实战(33)——条件生成对抗网络(Conditional Generative Adversarial Network, CGAN)

PyTorch深度学习实战&#xff08;33&#xff09;——条件生成对抗网络 0. 前言1. 条件生成对抗网络1.1 模型介绍1.2 模型与数据集分析 2. 实现条件生成对抗网络小结系列链接 0. 前言 条件生成对抗网络 (Conditional Generative Adversarial Network, CGAN) 是一种生成对抗网络…

Hadoop集群部署流程

前置要求 需要3台虚拟机&#xff0c;系统为Centos7&#xff0c;分别host命名为node1&#xff0c;node2&#xff0c;node3&#xff0c;密码均为root请确保这三台虚拟机已经完成了JDK、SSH免密、关闭防火墙、配置主机名映射等前置操作 在3台虚拟机的/etc/hosts文件中&#xff0…

verilog编程之乘法器的实现

知识储备 首先来回顾一下乘法是如何在计算机中实现的。 假设现在有两个32位带符号定点整数x和y&#xff0c;我们现在要让x和y相乘&#xff0c;然后把乘积存放在z中&#xff0c;大家知道&#xff0c;两个32位数相乘&#xff0c;结果不会超过64位&#xff0c;因此z的长度应该为64…

【word】论文、报告:①插入图表题注,交叉引用②快速插入图表目录③删改后一键更新

【word】①插入图表题注&#xff0c;②删改后一键更新 写在最前面插入题注交叉引用修改插入题注的文字格式快速插入图表目录 插入题注后有删改&#xff0c;实现编号一键更新 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你…

LCweekly-game

ExScorecomplete situation1220717/719(解答错误)30523/537(超时)40 有用的是Ex2和Ex4 Ex2 my solution class Solution { public://calculate xs l-time 幂乘int jiecheng(int x,int l){int zx;for(int i0;i<l;i){if(z>pow(10,4.5))return 0;zz*z;}return z;}bool se…

C# 将HTML网页、HTML字符串转换为PDF

将HTML转换为PDF可实现格式保留、可靠打印、文档归档等多种用途&#xff0c;满足不同领域和情境下的需求。本文将通过以下两个示例&#xff0c;演示如何使用第三方库Spire.PDF for .NET和QT插件在C# 中将Html 网页&#xff08;URL&#xff09;或HTML字符串转为PDF文件。 HTML转…