文中详细介绍我应用QQ获得服务器上传回的python代码的探寻过程,朝向的目标是对计算机网有一定掌握的阅读者。希望有兴趣爱好的人与我一起讨论!

要求来源于

近期,我还在跑一些信息量极大的代码。代码在当地一运作,CPU就布满了,代码运作時间又久,因而这段时间压根用不上电脑,这对肺炎疫情在家里的在校大学生很难受。把代码放服务器吧,又不清楚何时能跑完,这要我很难受。因此,希望服务器端代码能给我一个非常好的意见反馈,从而我选择了QQ互动方式 。

硬件配置专用工具

当地电脑一台,服务器一台(假如你仅仅想试着一下,而沒有服务器,能够应用 VMware vm虚拟机

探寻过程

最先,我应用的无页面CentOS服务器上是没有办法运作QQ的,因而要想完成互动,应当先把服务器上的信息传输到当地电脑,再由当地电脑发给QQ,那样我也能够接到信息了。

那麼就将总体目标切分为2个每日任务了,各自为:

  • 当地电脑给QQ发信息
  • 服务器与当地电脑信息互动

接下去就给大伙儿表明我是怎么完成这二步的:

当地电脑给QQ发信息

关键基本原理:根据 win32 API, 将python信息赋给粘贴板,黏贴到QQ聊天框中,最终仿真模拟按 “Enter” 键,推送信息1。
代码以下:

import win32gui
import win32con
import win32clipboard as w


class 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()

实际效果如下图所示:

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

留意:

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 = 8080
BUFSIZ = 1024
ADDR = (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 = 30985
BUFSIZ = 1024
ADDR = (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 win32gui
import win32con
import win32clipboard as w


class 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 time
HOST = 'yihuahuahua.e2.luyouxia.net'
PORT = 30985
BUFSIZ =1024
ADDR = (HOST,PORT)

tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)
start = time.time()
count = 1   1
end = time.time()
output_str = "結果为"   str(count)   " 耗费時间"   str(int(end - start))   "秒"
tcpCliSock.send(output_str.encode())
tcpCliSock.close()

运作結果:

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

乐滋滋。

改善方位与探寻

现阶段已经知道的缺点有: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推送传回信息內容请搜索之前的文章内容或再次访问下边的类似文章期待大伙儿之后多多的适用!