如何将服务器上的python代码通过QQ发送回传信息(附实现方法)_其它综合

来源:脚本之家  责任编辑:小易  

nginx+Django估计可以做到www.zgxue.com防采集请勿采集本网。

本文介绍我使用QQ得到服务器上回传的python代码的探索历程,面向的对象是对计算机网络有一定了解的读者。期待有兴趣的人和我一起探讨!

很简单,多线程向服务器发请求。但写完之后发现如果中途想停下来,按Ctrl+C达不到效果,自然想到要用信号处理函数捕捉信号,使线程都停下来,问题解决的方法请往下看: 复制代码代码如下: bin/env python

需求来源

不是很理解,你是要把收邮件改成发邮件吗?发邮件用的是smtp服务,然后填的是smtp服务器地址,然后是一个收件人地址 import smtplib 然后发邮件的示例代码如下 usr/bin/python coding:UTF-8-*-

最近,我在跑一些数据量巨大的代码。代码在本地一运行,CPU就占满了,代码运行时间又久,因此这段时间根本用不了电脑,这对疫情在家的大学生很难受。把代码放服务器吧,又不知道什么时候能跑完,这让我很不爽。于是,我希望服务器端的代码能给我一个不错的反馈,由此我选择了QQ交互方法。

pymo引擎:PYMO全称为python memories off,是一款运行于Symbian S60V3,Symbian3,S60V5,Symbian3,Android系统上的AVG游戏引擎。因其基于python2.0平台开发,并且适用于创建秋之回忆(memories off)风格的

硬件工具

方法1;来 步骤一:使用代理软件可以很简单的设置代理服务器 步骤二:百度一下深度代理 步骤三:使用这个软件就可以 方法2;步骤一:依次点击“开始”→“控制面板”→“网络和 Internet”,点击

本地电脑一台,服务器一台(如果你只是想尝试一下,而没有服务器,可以使用 VMware 虚拟机)

服务器转移有两个含义: 物理服务器从物理地址,比如A机房搬到B机房 需要和原有机房确认无纠纷无遗留问题,然后和新机房办理入驻手续。最终通过物流或汽车运输把服务器转移到新机房。网站服务器

探索历程

首先,我使用的无界面CentOS服务器上是没有办法运行QQ的,因此想要实现交互,应该先把服务器上的信息传送到本地电脑,再由本地电脑发送给QQ,这样我就可以收到消息了。

那么就将目标分割为两个任务了,分别为: 本地电脑给QQ发信息 服务器与本地电脑信息交互

接下来就给大家说明我是怎么实现这两步的:

本地电脑给QQ发信息

主要原理:通过 win32 API, 将python信息赋给剪切板,粘贴到QQ聊天框中,最后模拟按 “Enter” 键,发送消息1。

代码如下:

import win32guiimport win32conimport win32clipboard as wclass SendMsg: """ 这是一个用于将信息发送到QQ的类, 使用方法为 : SendMsg("收信人QQ昵称", "信息").sendmsg() 注意一点,收信人的QQ聊天窗口要在屏幕上,不能最小化或被掩盖。 """ def __init__(self, receiver, msg): self.receiver = receiver self.msg = msg self.set_text() # 设置剪贴版内容 def set_text(self): w.OpenClipboard() w.EmptyClipboard() w.SetClipboardData(win32con.CF_UNICODETEXT, self.msg) w.CloseClipboard() # 发送消息 def sendmsg(self): qq = win32gui.FindWindow(None, self.receiver) win32gui.SendMessage(qq, win32con.WM_PASTE, 0, 0) win32gui.SendMessage(qq, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)if __name__ == '__main__': SendMsg("一花一世界", "Hello, world").sendmsg()

效果如图所示:

在这里插入图片描述

注意:

1、python 关于 win32 的包,下载方式为:

pip install pypiwin32

2、QQ有两种发送消息的模式,一种是"Enter",一种是"Ctrl+Enter"。这里要选择"Enter"模式。

服务器与本地电脑信息交互

我们已经完成了本地电脑给QQ发信息的操作,现在只需要完成服务器与本地电脑信息的交互,就可以让本地电脑根据服务器的指令发送QQ信息了。

如何让服务器和本地电脑通信呢?经过一些思考,我选择用Socket2。使用Socket的话,就要解决IP问题,因为本地电脑的IP不是公网IP,我们需要解决端口映射问题,将本地电脑的IP映射到公网!

考虑到不一定有路由器,我使用了一款软件路由侠,该软件在免费的状态下,一个月可以有一个G的流量进行端口映射,因为我们主要用于小段文字传输,这点流量已经足够。该软件也操作简单,我不过多介绍。

本地电脑开放的端口为8080端口,经过路由侠的端口映射后,端口变为yihuahuahua.e2.luyouxia.net:30985

因为我们只用做单向通信,所以服务器的IP不重要。

我们首先测试一下Socket功能,让服务器给本地电脑发一个"Hello world"

代码如下:

本地电脑端代码

from socket import *HOST = ''PORT = 8080BUFSIZ = 1024ADDR = (HOST, PORT)tcpSerSock = socket(AF_INET, SOCK_STREAM)tcpSerSock.bind(ADDR)tcpSerSock.listen(5)while True: print('waiting for connection...') tcpCliSock, addr = tcpSerSock.accept() print('...connnecting from:', addr) while True: data = tcpCliSock.recv(BUFSIZ) if not data: break print(data.decode('utf-8')) tcpCliSock.close()tcpSerSock.close()

服务器端代码

from socket import *HOST = 'yihuahuahua.e2.luyouxia.net'PORT = 30985BUFSIZ = 1024ADDR = (HOST, PORT)tcpCliSock = socket(AF_INET, SOCK_STREAM)tcpCliSock.connect(ADDR)output_str = "Hello world!"tcpCliSock.send(output_str.encode())tcpCliSock.close()

注意:在进行Socket通信时,要注意开放端口!!!

将功能综合

这里规定一个任务:计算1加1的值,并返回计算时间,将上述功能综合后,代码如下:

本地电脑端代码

from socket import *import win32guiimport win32conimport win32clipboard as wclass SendMsg: """ 这是一个用于将信息发送到QQ的类, 使用方法为 : SendMsg("收信人QQ昵称", "信息").sendmsg() 注意一点,收信人的QQ聊天窗口要在屏幕上,不能最小化或被掩盖。 """ def __init__(self, receiver, msg): self.receiver = receiver self.msg = msg self.set_text() # 设置剪贴版内容 def set_text(self): w.OpenClipboard() w.EmptyClipboard() w.SetClipboardData(win32con.CF_UNICODETEXT, self.msg) w.CloseClipboard() # 发送消息 def sendmsg(self): qq = win32gui.FindWindow(None, self.receiver) win32gui.SendMessage(qq, win32con.WM_PASTE, 0, 0) win32gui.SendMessage(qq, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)if __name__ == '__main__': HOST = '' PORT = 8080 BUFSIZ = 1024 ADDR = (HOST, PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) tcpSerSock.bind(ADDR) tcpSerSock.listen(5) while True: tcpCliSock, addr = tcpSerSock.accept() while True: data = tcpCliSock.recv(BUFSIZ) if not data: break output_str = data.decode('utf-8') SendMsg("一花一世界", output_str).sendmsg() tcpCliSock.close() tcpSerSock.close()

服务器端代码

from socket import *import timeHOST = 'yihuahuahua.e2.luyouxia.net'PORT = 30985BUFSIZ =1024ADDR = (HOST,PORT)tcpCliSock = socket(AF_INET,SOCK_STREAM)tcpCliSock.connect(ADDR)start = time.time()count = 1 + 1end = time.time()output_str = "结果为" + str(count) + " 消耗时间" + str(int(end - start)) + "秒"tcpCliSock.send(output_str.encode())tcpCliSock.close()

运行结果:

在这里插入图片描述

美滋滋。

改进方向与探索

目前已知的缺陷有:Socket第一次通信有概率收不到消息,第二次就好了…希望有大佬在评论区指出我的不足。

这个版本只能实现单方面信息传送,如果想实现双向的,我思考的一个思路是通过 酷QAir的QQ机器人 加上 CQHTTP3 插件配合nonebot库4来实现。不过我的需求已经实现了,暂时懒得动手了,有缘再探索吧。

https://www.cnblogs.com/hwj2019/p/11552055.html ↩︎

https://blog.csdn.net/su_bao/article/details/80380465 ↩︎

https://github.com/richardchien/coolq-http-api ↩︎

https://nonebot.cqp.moe/guide/getting-started.html ↩︎

 总结

到此这篇关于我将服务器上的python代码通过QQ发送回传信息(附实现方法)的文章就介绍到这了,更多相关python qq发送回传信息内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

例如:在C:\\TDDOWNLOAD目录下有a.txt、b.txt两个文件,另有\\sub1子文件夹,C:\\TDDOWNLOAD\\sub1下又有c.txt、d.txt两个文件。1.os.walkos.walk()返回一个三元素的tuple:当前路径、子文件夹名称、文件列表。import osdef fun(path):for root,dirs,files in os.walk(path):for fn in files:print root,fnfun(r'C:\\TDDOWNLOAD')C:\\TDDOWNLOAD a.txtC:\\TDDOWNLOAD b.txtC:\\TDDOWNLOAD\\sub1 c.txtC:\\TDDOWNLOAD\\sub1 d.txt2.glob.globglob.glob()只接受一个参数,这个参数既代有路径,又代有匹配模式,返回值为一个列表。注意,glob.glob()无法直接穿透子文件夹,需要自己处理:def fun(path):for fn in glob.glob(path+os.sep+'*'):#'*'代表匹配所有文件if os.path.isdir(fn):#如果结果为文件夹fun(fn)#递归else:print fnfun(r'C:\\TDDOWNLOAD')C:\\TDDOWNLOAD\\a.txtC:\\TDDOWNLOAD\\b.txtC:\\TDDOWNLOAD\\sub1\\c.txtC:\\TDDOWNLOAD\\sub1\\d.txt'*'为匹配模式,代表匹配所有文件,只有这样才能将子文件夹查出来,以便递归深入,探查下一层的文件。展开内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • python发qq消息轰炸虐狗好友思路详解(完整代码)
  • python自动化ui工具发送qq消息的实例
  • python qqbot 实现qq机器人的示例代码
  • python qqbot库的qq聊天机器人
  • python爬取qq music中的音乐url及批量下载
  • 用python实现qq游戏大家来找茬辅助工具
  • 都2019年了,还问http中get和post的区别
  • 获取键盘键的值 集合 方便监控键盘事件
  • 将来会是python、java、golang三足鼎立的局面吗
  • 关于git远程与本地冲突的解决方法
  • 解决maven第一次创建项目太慢的问题
  • 2019-ncov 全国新型肺炎疫情每日动态趋势可视图
  • 使用 ffmpeg 命令拼接mp3音频文件异常问题及解决方法
  • intellij idea激活码获取方法(idea2020激活码汇总)
  • 从学习到接单赚钱 十大网络技术人员推荐收藏的网站
  • github 热门:别再用 print 输出来调试代码了
  • Python 如何遍历服务器上所有同一类型的文件
  • 如何用python脚本过滤到达服务器某个站点的HTTP请求?
  • Python web 开发一定要用框架吗?
  • 如何把本地项目部署到服务器上
  • python 怎么让程序接受ctrl + c终止信号
  • python的发送邮件代 import poplib # 输入邮件地址, 口令和POP3服务器地址
  • python可以做什么
  • 如何设置电脑代理服务器
  • 如何进行服务器转移
  • 服务器的IDAC口是干什么用的
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全javascriptasp.netphp编程ajax相关正则表达式asp编程jsp编程编程10000问css/htmlflex脚本加解密web2.0xml/rss网页编辑器相关技巧安全相关网页播放器其它综合dart首页其它综合python发qq消息轰炸虐狗好友思路详解(完整代码)python自动化ui工具发送qq消息的实例python qqbot 实现qq机器人的示例代码python qqbot库的qq聊天机器人python爬取qq music中的音乐url及批量下载用python实现qq游戏大家来找茬辅助工具都2019年了,还问http中get和post的区别获取键盘键的值 集合 方便监控键盘事件将来会是python、java、golang三足鼎立的局面吗关于git远程与本地冲突的解决方法解决maven第一次创建项目太慢的问题2019-ncov 全国新型肺炎疫情每日动态趋势可视图使用 ffmpeg 命令拼接mp3音频文件异常问题及解决方法intellij idea激活码获取方法(idea2020激活码汇总)从学习到接单赚钱 十大网络技术人员推荐收藏的网站github 热门:别再用 print 输出来调试代码了最新idea2020注册码永久激活(激活删除svn三种方法delsvn(windows+intellij idea激活码获取方法(ic/s和b/s两种架构的概念、区别和网址(url)支持的最大长度是多少5个linux平台程序员最爱的开发工url中斜杠/和反斜杠\的区别小结提示“处理url时服务器出错”和“支付宝 接口开发帮助(asp,php,as科学知识:同步、异步、阻塞和非阻塞区别详解inet_pton()和inet_ntop()函数一文了解文档写作利器 markdownwindow下安装jdk1.8+tomcat9.0.27+mysql5github eclipse配置使用教程详解如果你有这33种症状了请离开电脑去走走吧用asp与php实现百度ping服务的代码都2019年了,还问http中get和post的区别打造博客园(cnblogs)超级自定义界面好玩的vbs小程序之关机功能
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved