目标:有A和B两台机器,希望在机器A上操作B上的脚本
 
解决方法:使用paramiko实现操作远程机器
 
1.安装paramiko
 
安装第三方包【pip3 install paramiko】
 
 
如果pip访问国外站点总超时,可以使用国内镜像,使用-i指定, --trusted-host pypi.douban.com信任镜像源
pip3 install paramiko -i http://pypi.douban.com/ --trusted-host pypi.douban.com
 
pipy国内镜像目前有:
http://pypi.hustunique.com/  华中理工大学
http://pypi.sdutlinux.org/  山东理工大学
http://pypi.mirrors.ustc.edu.cn/  中国科学技术大学
 
 
 
2.paramiko用法
参考文档:
 
第一步:通过账号密码连接
def connect(host,username,password):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect(host,username=username,password=password,allow_agent=True)
return ssh
except:
return None
 
host为要连接的机器IP,username和password为登录机器的账号密码
 
第二步:在远程机执行命令(shell命令)
def exec_commands(conn,cmd):
stdin,stdout,stderr = conn.exec_command(cmd)
results=stdout.read()+stderr.read()
print(results)
return results
 
stdin:标准输入
stdout:标准正确输出
stderr:标准错误输出
通过stdout.read()获得对应输出内容
 
第三步:和远程机器间传递文件
def ftpssh(frompath,topath,method="get"):
t = paramiko.Transport(远程机器IP)
t.connect(username= 远程机器登录用户名, password = 远程机器登录密码)
sftp = paramiko.SFTPClient.from_transport(t)
if method == "get":#将远程文件copy到本地
sftp.get(frompath, topath)
elif method == "put":#将本地文件copy到远程机器上
sftp.put(frompath, topath)
t.close()
 
method=get,将远程机对应文件下载到本地的路径下
method=put,将本地文件上传到远程机对应路径下
 
其他说明:
1.通过paramiko操作远程机器的python3文件,python3脚本里有读写文件的操作
明明是python3结果有编码问题,所以改了远程机器脚本,读写文件时强指定编码格式为utf-8
with open(“文件","w",encoding='utf-8') as f:
 
2.我通过第二步执行命令,读取不到控制台输出的结果,所以通过将输出结果重定向到本地文件,然后通过远程机器间传递文件来实现把文件放到本地
这样就直接读取本地文件了
 
比如:我执行Appium测试脚本,会在控制台输出一些操作结果,我想获得这些结果
cmd="source ~/.bash_profile;/usr/local/bin/python3 ./test.py >> ./log.txt 2>&1"
exec_commands(cmd)
ftpssh(WebmanageConfig.uitestpath + "/testsuit/temptestcaseslist.txt", "./temptestcaseslist.txt")
3.在执行远程机器的脚本时,发现有些环境变量没有读取到,所有我又在脚本中加载了远程机器的环境变量文件
source ~/.bash_profile
 
4.每条远程命令执行都是单独处理的,处理完后都会回到初始目录。
所以有cd目录的操作,最好把多条语句放到同一条命令里,不同命令使用分号隔开
 

python3使用paramiko操作远程机器的更多相关文章

  1. Python操作远程机器

    操作远程机器主要使用的有paramiko,WMI(Windows Management Instrumentation),SMBConnection. paramiko paramiko使用SSH2协 ...

  2. paramiko模块(远程操作服务器)

    paramiko模块(远程操作服务器) django+paramkio实现远程某些服务器执行命令+上传文件 用于帮助开发者通过代码远程连接服务器,并对服务器进行操作. pip3 install par ...

  3. 使用pymysql和paramiko实现远程安装软件

    通过pymysql模块调用数据库获取安装信息,通过paramiko模块远程传输脚本并执行来安装软件,本文以安装apache为例. 创建apache安装信息数据表install_apache,设定三个字 ...

  4. Windows下python3登陆和操作linux服务器

    一.环境准备 python3远程连接需要用到pycrytodome和paramiko库,其中后者依赖前者,所以按照顺序来安装 1. 安装pycrytodome 1 pip install pycryt ...

  5. visualvm 监控 远程 机器上的 Java 程序

    JDK里面本身就带了很多的监控工具,如JConsole等. 我们今天要讲的这款工具visualvm,就是其中的一款.但是这款工具是在JDK1.6.07及以上才有的.它能够对JAVA程序的JVM堆.线程 ...

  6. 转:visualvm监控远程机器上的Java程序

    转自:http://hanwangkun.iteye.com/blog/1195526 JDK里面本身就带了很多的监控工具,如JConsole等.我们今天要讲的这款工具visualvm,就是其中的一款 ...

  7. 非root用户ssh 执行 sudo远程机器免密钥

    非root用户ssh 执行 sudo远程机器免密钥 # 1.登陆192.168.1.10 ssh-keygen -t rsa # 一路回车 # 将公钥添加到认证文件中 cat ~/.ssh/id_rs ...

  8. VS编译完成后自动复制到远程机器

    缘起 最近在调试网络通信,每次一有点小修改,都要将程序从开发机复制到测试机,不胜烦扰.既然我们程序猿,为什么要那么死板呢,能够用代码解决的问题,就不要用手去解决. 解决过程 复制 手工复制外有没有其他 ...

  9. 日常开发技巧:在远程机器上直接使用adb

    背景 嵌入式开发中,开发工作是在远程服务器上进行的.当需要adb推送一个文件到开发板时,则需要重新在本地机器中找到该文件,再执行命令.这样的操作比较麻烦. 下面介绍我的解决方式. sshfs挂载 首先 ...

随机推荐

  1. 3.HTML+CSS 制作个太阳

    效果地址:https://codepen.io/flyingliao/pen/moPBwR HTML code: <div class="sun"></div&g ...

  2. 用代码检查Windows程序的位数

    方法就是通过读取程序文件的头部来判断,具体代码如下: #include <stdio.h> #include <windows.h> int CrnGetImageFileMa ...

  3. Django之视图层介绍

    1. 伪静态设置: 路由层: url('^index/$', views.index), url('^article/(?P<id>(\d+)).html/$', views.articl ...

  4. 关于vector变量的size,是一个无符号数引发的bug。LeetCode 3 sum

    class Solution { public: vector<vector<int>> threeSum(vector<int>& a) { vector ...

  5. 跨域(三)——JSONP

    一.什么是JSONP? 百度百科:JSONP(JSON with Padding)是JSON的 一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题.由于同源策略,一般来说位于 server1. ...

  6. Haskell语言学习笔记(81)Data.Typeable

    Data.Typeable 利用 Data.Typeable,可以打印动态类型信息. class Typeable (a :: k) where typeRep# :: TypeRep a typeR ...

  7. TypeScript语言学习笔记(1)

    基本类型 // 布尔型(Boolean) let isDone: boolean = false; // 数值型(Number) let decimal: number = 6; let hex: n ...

  8. 【380】python 获取列表排序后的索引列表

    参考:Equivalent of Numpy.argsort() in basic python? - Stack Overflow 通过 enumerate 实现 [i for i,v in sor ...

  9. 在JSP页面中导入jstl标签库

    1 在工程中引用JSTL的两个jar包和标签库描述文件. (1)在项目上右击,从弹出的快捷键菜单中选择Properties命令,在出现的项目属性对话框上,选择DeploymentAssembly. ( ...

  10. 使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...