目录
1.认识Python
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字或标点符号,它具有比其他语言更有特色的语法结构。
2.环境与工具
2.1 python环境
在Windows上使用命令行窗口查看所安装的python版本
python --version
2.2 Visual Studio Code编译
Visual Studio Code是一款由微软开发且跨平台的免费源代码编辑器。该软件以扩展的方式支持语法高亮、代码自动补全、代码重构功能,并且内置了命令行工具和Git 版本控制系统。
3.远程控制
3.1 代码构思
使用python中的socket库实现远程套接字接收与发送。
3.2 服务端代码
import socket
import subprocess
if __name__ == '__main__':
# 建立一个socket套接字对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口
s.bind(('127.0.0.1', 9999))
# 监听
s.listen(5)
print("服务器启动,等待客户连接...")
while True:
# 接受客户端的连接
conn, addr = s.accept()
print("有客户连接,地址和端口号为:", addr)
while True:
try:
# 接受客户端发送的数据
recv_cmd = conn.recv(1024)
# 将接受到的数据转换为字符串
recv_cmd = recv_cmd.decode('utf-8')
if not recv_cmd:
print('客户端已断开')
break
print('客户端发来命令:', recv_cmd)
result = subprocess.Popen(recv_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result.wait()
# 取出错误信息
err = result.stderr.read()
# 如果有错误信息
if err:
# 将错误信息转换为字符串
cmd_ret_info = err.decode('gbk')
else:
# 取出正常信息
cmd_ret_info = result.stdout.read().decode('gbk')
if not cmd_ret_info:
cmd_ret_info = '命令执行成功,但是没有返回结果'
conn.send(cmd_ret_info.encode('gbk'))
except Exception as e:
print("发生异常:", e)
break
# 关闭与当前客户端连接
conn.close()
3.3客户端代码
import socket
if __name__ == '__main__':
#建立一个socket套接字对象
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#连接服务器
client.connect(('127.0.0.1',9999))
print('已连接到远程,可以发送命令。。。')
while True:
send_cmd=input('>>>').strip()
#如果命令为空,不向服务端发送
if not send_cmd:
continue
#如果命令为quite,退出循环
if send_cmd=='quit':
print('本客户端即将与服务端断开。')
break
#发送命令
client.send(send_cmd.encode('utf-8'))
#接收服务端返回的结果
cmd_ret_info=client.recv(1024)
#打印命令执行情况信息
print(cmd_ret_info.decode('gbk'))
#断开与服务器的连接
client.close()
3.4 运行结果
这里我在同一个设备上进行测试,客户端运行的指令都会在服务端显示。
4.总结
使用python编写远程监控程序,要保证在同一个局域网下。注意IP地址和端口号的设置!