15 [网络编程]-ssh远程命令
1、执行命令os.system('ls')
- os.system 返回1 or 0 ,不能当做数据发送
# windows
# dir 查看某个文件夹下子自文件名与子文件夹名
# ipconfig 查看本地网卡的ip信息
# tasklist 查看运行的进程 # linux
# ls
# ifconfig
# ps aux
2、subprocess模块
但注意注意注意:
res = subprocess.Popen(cmd.decode('utf-8'),shell=True,stderr=subprocess.PIPE,stdout=subprocess.PIPE)
命令结果的编码是以当前所在的系统为准的,如果是windows,那么res.stdout.read()读出的就是GBK编码的,在接收端需要用GBK解码,且只能从管道里读一次结果
import subprocess
# subprocess.Popen('dir') # FileNotFoundError: [WinError 2] 系统找不到指定的文件。
# subprocess.Popen('dir', shell=True) # 命令执行正确
obj = subprocess.Popen('dir', shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
) print(obj)
print('studout:', obj.stdout.read().decode('gbk')) # windows解码成gbk # 并且只能从管道读一次
print('studerr:', obj.stderr.read().decode('gbk')) # linux解码成utf-8 # 命令执行错误
obj = subprocess.Popen('dissr', shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
) print(obj)
print('studout:', obj.stdout.read().decode('gbk')) # windows解码成gbk
print('studerr:', obj.stderr.read().decode('gbk')) # linux解码成utf-8
3、简单远程执行命令程序开发
(1)服务端
import socket
import subprocess server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('127.0.0.1', 9994)) server.listen(5) while True:
print('waiting...')
conn, addr = server.accept() while True:
try:
# 1.收命令
data = conn.recv(1024)
print('=》', data)
if not data:
break # 2.执行命令,拿到结果
obj = subprocess.Popen(data.decode('utf-8'), shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
) # 3.把命令的结果返回给客户端
stdout = obj.stdout.read()
stderr = obj.stderr.read()
conn.send(stdout+stderr) # 可以优化的一个点 except ConnectionResetError:
break conn.close() server.close()
(2)客户端
import socket client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('127.0.0.1', 9994)) while True: # 1.发出命令
data = input('>>>').strip()
if not data:
continue
client.send(data.encode('utf-8')) # 2.接受命令的结果,打印
ret = client.recv(1024)
print('from server:', ret.decode('gbk')) # windows gbk编码 client.close()
4、终止python程序
15 [网络编程]-ssh远程命令的更多相关文章
- 虚拟机VMware网络类型&&SSH远程连接Linux
前言: Linux专题是16年11月开始写,说来惭愧,已经5个月没学Linux,至今感觉连入门还没达到.暑假实习有投运维开发岗位,无奈对Linux不熟悉,校招简历也被刷了.so, 我打算先花1个月内的 ...
- 【循序渐进学Python】15.网络编程
Python 内置封装了很多常见的网络协议的库,因此Python成为了一个强大的网络编程工具,这里是对Python的网络方面编程的一个简单描述. 1. 常用的网络设计模块 在标准库中有很多网络设计相关 ...
- 判断ssh远程命令是否执行结束
注:这是一个没什么鸟用的功能.不过也算是一种拓展. 通常在那些"一键化部署"的shell脚本中,可能需要使用ssh执行远程命令来实现一些简单的自动化,这些远程命令可能需要执行一段时 ...
- 8.9.网络编程_Socket 远程调用机制
1.网络编程 1.1.网络编程概述: 通过通信线路(有线或无线)可以把不同地理位置且相互独立的计算机连同其外部设备连接起来,组成计算机网络.在操作系统.网络管理软件及网络 通信协议的管理和协调下,可以 ...
- ssh 远程命令
远程拷贝文件,scp -r 的常用方法: 1.使用该命令的前提条件要求目标主机已经成功安装openssh-server 如没有安装使用 sudo apt-get install openssh-ser ...
- 网络编程ssh,粘包
1.什么是socket? TCP,可靠地,面向连接协议,有阻塞rect udp,不可靠的,无线连接的服务 这里因为不需要阻塞,所以速度会很快,但安全性不高 2.关于客户端退出而服务器未退出的解决办法 ...
- socket编程执行远程命令实现_python
一.单客户端连接的例子: 服务端: import socket,os,subprocess server=socket.socket() server.bind(('localhost',1234)) ...
- [Python 网络编程] TCP、简单socket模拟ssh (一)
OSI七层模型(Open System Interconnection,开放式系统互联) 应用层 网络进程访问应用层: 为应用程序进程(例如:电子邮件.文件传输和终端仿真)提供网络服务: 提供用户身份 ...
- 网络编程 - 1.简单的套接字通信/2.加上通信循环/3.bug修复/4.加上链接循环/5.模拟ssh远程执行命令
1.简单的套接字通信 服务端 ''' 服务端 接电话 客户端 打电话 1.先启动服务端 2.服务端有两种套接字 1.phone 用来干接收链接的 2.conn 用来干收发消息的 ''' import ...
随机推荐
- Oracle EBS 请求
SELECT t.responsibility_id, t.responsibility_key, t.responsibility_name, t.description, t.menu_id, f ...
- SQL点点滴滴_聪明的小写法(持续更新中)
1.生成序列号 SELECT number + 1 ,number FROM master..spt_values WHERE type = 'P' ORDER BY number 说明: maste ...
- 分别用C/C++ 和 C#实现简单的观察者模式
网上找了很多关于观察者模式的代码例子和文章,都写的比较复杂,我个人还是喜欢从易到难,今天自己参考网上资料,也写了一个简单观察者模式的例子,简单的复习了一下Observer 模式,Observer 模式 ...
- ORAchk-数据库健康检查好帮手
ORAchk 之前被称为RACcheck,后来它的检查范围进行了扩展,改名为了ORAchk,它是在数据库系统进行健康检查的一个专用工具,这个工具主要用来检查软件的配置是否符合要求以及一些最佳实践是否被 ...
- 安卓 USB摄像头 开源库 UVCCamera 教程
https://github.com/saki4510t/UVCCamera UVCCamera 听名字就知道使用UVC( USB VEDIO CLASS) 协议的通用类库.linux原生支持,基本支 ...
- zendstudio 默认网页打开your project的时候不显示本地主机localhost的解决方法
修改wamp配置文件c:\\wamp64\wampmanager.conf 修改为如下选项即可 默认这个选项是off关闭的,打开即可. urlAddLocalhost = "on" ...
- Linux fsck命令详解
fsck(file system check)用来检查和维护不一致的文件系统.若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查. fsck常见命令参数 -a:自动修复文件系统,不询问任何 ...
- shell study
目录 shell记录 执行脚本 变量使用 注释 shell传递参数 运算符 echo printf test 流程控制 if ... else ... for while until case 跳出循 ...
- 【原创】rabbitmq 学习
rabbitmq 命令 1. 用户管理类命令: 该类别比较意图比较明显,详细查看官方文档.现做俩点说明: authenticate_user 此命令用于验证一个用户名和密码对不对,并没有什么用: se ...
- SOJ 4580 动态规划之01背包 (01背包)
Description Sidney想去Gandtom家玩.但Sidney家和Gandtom家之间是高低不平.坑坑洼洼的土路.所以他需要用他的背包装几袋稀的泥,在路上铺平一些干的土,使路变成平整的泥土 ...