Python学习---远程执行命令
原则:发送一个接受一个
原理:发送执行命令的大小给客户端,客户端根据接受的大小判断是否全部接收了服务器sendall()发送的全部
利用send发送的全部数据都是bytes类型的,需要进行字符编码的转换,因为中文环境,所以需要转换GBK查看
客户端:
# 客户端
import socket # family=AF_INET, 代表使用IPV4的IP协议
# type=SOCK_STREAM 代表使用TCP协议进行连接
client = socket.socket()
ip_addr = ('127.0.0.1', 9999)
try:
client.connect(ip_addr)
exit_flag = True
while exit_flag:
# 发送一定要有接收
inp = input('>>>:')
if inp != 'bye':
client.send(bytes(inp, 'utf-8'))
exit_flag = True
else:
client.send(bytes(inp, 'utf-8'))
exit_flag = False
result_len = int(str(client.recv(1024), encoding='utf-8')) # 接受服务器端发送的数据大小
print('客户端接收的大小为:', result_len)
data_size = bytes()
while len(data_size) != result_len:
info = client.recv(1024) # 最大接收1024K数据,# 传送/接收的数据一定是byte类型
data_size += info
print('客户端:', str(data_size, 'gbk')) # Win7系统就是GBK编码返回的数据
except Exception as e:
print('客户端关闭连接', e)
finally:
client.close()
服务端:
# 服务端
import socket
import subprocess
# family=AF_INET, 代表使用IPV4的IP协议
# type=SOCK_STREAM 代表使用TCP协议进行连接
server = socket.socket() # 创建socket
ip_addr = ('127.0.0.1', 9999) # 1024之前的端口,默认是OS使用
server.bind(ip_addr) # 要求必须是一个元组
server.listen(3) # 开始监听传入连接。在拒绝连接之前,可以挂起的最大连接数量。
while True:
conn, addr = server.accept() # 接受连接并返回(conn,address)
# 其中conn是新的套接字对象[客户端],可以用来接收和发送数据。
# address是连接客户端的地址。
exit_flag = True
while exit_flag:
print('当前连接对象', addr)
# 发送一定要有接收
data = conn.recv(1024)
print('服务器:', str(data, 'utf-8'))
obj = subprocess.Popen(str(data, 'utf-8'), shell=True, stdout=subprocess.PIPE)
cmd_result = obj.stdout.read() # 编码用GBK,默认在当前文件所在的文件路径
conn.sendall(bytes(str(len(cmd_result)), encoding='utf-8')) # 发送数据大小,int不能直接转换为bytes
print('服务器发送的大小为:', len(cmd_result)) # 某种程度上解决了粘包现象
conn.sendall(cmd_result) # 发送全部的数据
server.close()
注意: 粘包现象: 在服务器端连续send()的时候,2个send直接会等待很短的时间,所以导致传递过去的len会报错,因为不能转换为int型,可以利用Time.sleep解决,也可以遵循一收一发的原则,发送一个以后在发送一次解决。
Python学习---远程执行命令的更多相关文章
- python案例远程执行命令
------类似于cmd的功能,client执行命令,server发命令结果发送到client -----------server.py------------------- import subpr ...
- Python ssh 远程执行shell命令
工具 python paramiko 远程执行命令 import paramiko ssh = paramiko.SSHClient() key = paramiko.AutoAddPolicy() ...
- 【Python】模块学习之使用paramiko连接Linux,远程执行命令,上传下载、文件
本文主要介绍paramiko远程执行linux命令,及在服务器上进行文件的上传.下载 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. ...
- python之实现批量远程执行命令(堡垒机)
python远程批量执行 我并不是一个专业的开发,我一直在学习linux运维,对于python也是接触不久,所以代码写的并不是很规范简洁. 前段时间一个同学找我一起做一个自动化运维平台,我对pytho ...
- Python之路 - Socket实现远程执行命令
Python之路 - Socket实现远程执行命令 os模块实现
- python 网络编程(远程执行命令与粘包)
远程执行命令 先来学习一个新模块 , 一会用到的.. 新模块: subprocess 执行系统命令 r = subprocess.Popen('ls',shell=True,stdout=subpro ...
- Python Paramiko实现sftp文件上传下载以及远程执行命令
一.简介 Paramiko模块是基于Python实现的SSH远程安全连接,用于SSH远程执行命令.文件传输等功能. 安装模块 默认Python没有自带,需要手动安装: pip3 install par ...
- 一键帮你复制多个文件到多个机器——PowerShell小脚本(内附PS远程执行命令问题解析)
作为一个后台程序猿,经常需要把一堆程序集(DLL)或者应用程序(EXE)复制到多个服务器上,实现程序的代码逻辑更新,用以测试新的功能或改动逻辑.这里给大家介绍一个自己实现的PowerShell脚本,方 ...
- 使用paramiko远程执行命令、下发文件
写部署脚本时,难免涉及到一些远程执行命令或者传输文件. 之前一直使用sh库,调用sh.ssh远程执行一些命令,sh.scp传输文件,但是实际使用中还是比较麻烦的,光是模拟用户登陆这一点,还需要单独定义 ...
随机推荐
- FastDFS安装、配置、部署(一)-安装和部署 (转)
FastDFS是一个开源的,高性能的的分布式文件系统,他主要的功能包括:文件存储,同步和访问,设计基于高可用和负载均衡,FastDFS非常适用于基于文件服务的站点,例如图片分享和视频分享网站 Fast ...
- (转)nginx 常用模块整理
原文:http://blog.51cto.com/arm2012/1977090 1. 性能相关配置 worker_processes number | auto: worker进程的数量:通常应该为 ...
- Python实现WEB QQ 登录与消息发送(第一版本 2015.06.26)
WEB QQ的登录步骤与协议,需要的度娘下,很多. 转载说明来源:http://www.cnblogs.com/ryhan/p/4602762.html 我这实现是参考了度娘搜的 和自己抓包分析的. ...
- 使用git配合idea使用oschina代码仓库初级教程
http://git.oschina.net/ 这个是开源中国的代码仓库是免费的,可以建100和仓库,私有也是免费的 第一步,创建 oschina代码仓库,这里就忽略了.很简单.去注册一个简单几步就可 ...
- 关于游标嵌套时@@FETCH_STATUS的值
游标嵌套使用时,@@FETCH_STATUS的值有时会从内部游标影响到外部的游标,使外部的游标只循环一次.这时要检查游标的使用方法.要先移动游标,然后就开始判断,为真进行进行业务逻辑处理,然后移动游标 ...
- ubuntu 修改 ls 下的目录颜色
ubuntu 下, ls 显示的目录的颜色,怎么说呢,看起来太费劲了. 于是想着修改成容易识别的颜色. 于是搜索了一下. 这里列举三个搜到的教程吧. 简单说我按这上面的方法做了,然后都失败了. 1. ...
- Winform取消用户按下键盘的事件
1. 有时候针对某个控件,想取消它的所有键盘按下事件, 只需要为这个控件绑定keyDown事件即可,然后处理的代码如下: private void txtDeviceName_KeyDown(obje ...
- poj 3748 位操作
位操作 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8856 Accepted: 3535 Description 假 ...
- CentOS7 防火墙操作
1.firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status f ...
- CF 675D——Tree Construction——————【二叉搜索树、STL】
D. Tree Construction time limit per test 2 seconds memory limit per test 256 megabytes input standar ...