使用pexpect检查SSH上的文件是否存在

使用 pexpect 模块可以在 Python 中执行命令并检查其输出。你可以使用 ssh 命令连接到远程服务器,并执行 ls 命令检查文件是否存在。下面我就列举几个我经常遇到的几个错误并做个详细的解决方案。

在这里插入图片描述

1、问题背景

用户需要编写一个 Python 脚本,以检查一个文件是否存在于另一台计算机上,该计算机可以通过 SSH 访问。用户已经使用 pexpect 库编写了大部分代码,但需要捕获文件存在与否的值,以便断言文件是否存在。

2、解决方案

提出了以下三种解决方案:

方案 1:检查 SSH 命令的返回码

  • 使用 SSH 命令检查文件是否存在,并检查返回码。如果返回码为 0,则文件存在;如果返回码为 1,则文件不存在;如果返回码为 255,则 SSH 连接超时或主机不存在。

方案 2:使用 Paramiko SSH2 模块

  • 使用 Paramiko SSH2 模块与远程服务器建立 SFTP 连接,然后使用 stat() 方法检查文件是否存在。如果 stat() 方法引发 IOError,则文件不存在;否则,文件存在。

方案 3:使用 pexpect 库

  • 在 pexpect 库的 expect() 方法中,使用 \r\n 换行符来确保命令执行的一致性。

  • 定义一个函数 hostFileExists() 或 hostExpect() 来检查文件是否存在,并返回一个值来指示文件是否存在。

任何一种方案都能够解决用户的问题,即检查一个文件是否存在于另一台计算机上,该计算机可以通过 SSH 访问。用户可以选择一种最适合自己情况的方案。

代码例子

方案 1 的代码示例:

import subprocessdef check_file_exists(host, file_path):command = f"ssh {host} test -f {file_path}"result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)if result.returncode == 0:return Trueelif result.returncode == 1:return Falseelse:raise Exception("SSH connection error or host not found.")if __name__ == "__main__":host = "10.10.0.0"file_path = "/opt/ad/bin/email_tidyup.sh"if check_file_exists(host, file_path):print("File exists.")else:print("File does not exist.")

方案 2 的代码示例:

import paramikodef check_file_exists(host, username, password, file_path):try:transport = paramiko.Transport((host, 22))transport.connect(username=username, password=password)sftp = paramiko.SFTPClient.from_transport(transport)sftp.stat(file_path)return Trueexcept IOError:return Falsefinally:transport.close()if __name__ == "__main__":host = "10.10.0.0"username = "service"password = "word"file_path = "/opt/ad/bin/email_tidyup.sh"if check_file_exists(host, username, password, file_path):print("File exists.")else:print("File does not exist.")

方案 3 的代码示例:

import pexpectdef check_file_exists(host, username, password, file_path):ssh = pexpect.spawn('ssh %s@%s' % (username, host))ssh.expect('password:')ssh.sendline(password)ssh.expect('> ')ssh.sendline('[ ! -e %s ] && echo NO || echo YES' % file_path)ssh.expect(['NO', 'YES'])if ssh.after == 'YES':return Trueelse:return Falseif __name__ == "__main__":host = "10.10.0.0"username = "service"password = "word"file_path = "/opt/ad/bin/email_tidyup.sh"if check_file_exists(host, username, password, file_path):print("File exists.")else:print("File does not exist.")

请确保替换示例代码中的 hostnameusernamepasswordfile_path 为实际的值。这段代码会通过 SSH 连接到远程服务器,并执行 ls 命令来检查文件是否存在

如果有啥问题可以这里留言讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python面向过程与初始面向对象编程

让我们穿越到《龙珠》世界,一起揭开 面向对象编程 的神秘面纱吧。 面向过程编程与面向对象编程 天下第一武道会 选手登记 第 22 届天下第一武道会即将召开,各路武术高手齐聚一堂,其中最受瞩目的,当属卡卡罗特(孙悟…

我的创作纪念日--我和CSDN一起走过的1825天

机缘 第一次在CSDN写文章,是自己在记录学习Java8新特性中Lambda表达式的内容过程中收获的学习心得。之前也有记录工作和生活中的心得体会、难点的解决办法、bug的排查处理过程等等。一直都用的有道笔记,没有去和大家区分享的想法,是一起的朋…

C++第二十四弹---从零开始模拟STL中的list(上)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、基本结构 2、基本函数实现 2.1、默认构造函数 2.2、尾插数据 3、迭代器的封装 3.1、迭代器的基本结构 3.2、迭代器重载函数的实现 4、迭…

大家都在用的4款超实用视频剪辑软件,快来码住自用吧!

随着自媒体行业的不断发展,不少小伙伴也逐渐步入了短视频的热潮。对于短视频制作来说,视频剪辑软件的选择非常重要。 如果剪辑软件不够好,整个视频就基本垮掉了。今天就给大家推荐4款好用的视频剪辑软件。 1.牛学长视频剪辑 推荐剪辑新手入门…

win11通过网线分享网络到Ubuntu工控机

1.条件:一个能无线联网的win11,一根网线,一台Ubuntu工控机,并且使用网线连接两者 2.在win11电脑上 2.1 打开控制面板的网络和Internet 2.2 进入网络和共享中心,在左侧进入 更改适配器设置 2.3 在WLAN上右键&#xff0…

如何通过Python SMTP配置示例发附件邮件?

Python SMTP配置的步骤?SMTP服务器的优缺点有哪些? 当我们需要发送包含附件的邮件时,自动化的解决方案显得尤为重要。Python提供了SMTP库,使我们能够轻松配置并发送带有附件的邮件。AokSend将通过一个示例来展示如何操作&#xf…

AIGC会带来失业潮吗?紧紧跟时代第一步,如何学习AIGC

会,但AI淘汰的始终是跟不上时代的人。 现在很多公司都有AI培训,不仅GPT,还有Midjourney、Stable DIffusion等一系列AI工具。 像我们公司虽然今年招的少,但也会对新招的应届生统一进行AI培训。 用任正非先生的话来说就是&#x…

【ARM】PK51-如何添加芯片型号的方法

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 遇到打开工程提示没有该芯片设备提示如何解决。 2、 问题场景 客户发来一个工程文件,打开后软件提示没有发现该芯片设备提示。 图 1 3、软硬件环境 1)、软件版本:keil μvision…

弗莱明发现青霉素

1945年,弗莱明因青霉素获诺贝尔医学奖。在弗莱明之前有多人注意到了青霉能抑制细菌的生长,但是他们没有一个人像弗莱明那样做进一步的更深入的研究,更没有一个人像弗莱明那样确定了这个特殊的现象是由于青霉分泌的某种物质所致。所以&#xf…

CAD入门基础

一,新建一个CAD文件 1.新建文件 2.保存为.dwt文件 3.画直线 点击直线图标画直线,选中直线出现高亮,点击左键,出现" 取消 " 就是可以画下一条线段了 " 删除"就可以了删除了。 3、直接删除法 1. 首先&#xf…

【C++】C++提供类型转换的机制

目录 前言: 一,static_cast 二,reinterpret_cast 三,const_cast 四,dynamic_cast 前言: 传统的不同类型转换有隐式类型转换(类型不匹配时编译器自动进行的转换,如:i…

Simulink建立4WIS线性二自由度参考模型

4WIS线性二自由度参考模型 基于前轮转向做了小改动,难度不大,相当于两个微分方程加了两项 Simulink向CarSim中输入四个车轮的转角 有一点注意,四轮转向,前后轴车轮转角不应相等,否则动画会很滑稽 同侧车轮转向角的大小…

各种内部排序算法的比较及应用(插入排序、交换排序、选择排序、归并排序、基数排序)

目录 内部排序 前言 1.内部排序算法的比较 1.1各种排序算法的特点、比较和适用场景 1.2排序算法的稳定性判断及改进 1.3更适合采用顺序存储的排序算法 1.4根据排序的中间过程判断所采用的排序算法 1.5各种排序算法的性质 2.内部排序算法的应用 2.1选取排序算法时需要…

UE4_Ben_图形52_水下效果处理

学习笔记,不喜勿喷,欢迎指正,侵权立删!祝愿生活越来越好! 在这个后期处理的效果中,我们可以看到有很多不同的,这里有浓雾,波纹扭曲,镜头扭曲和边缘模糊,在第4…

pcb实验六-元件设计

目录 一,绘制28管脚PLCC封装ATF750C-10JC元件 二,绘制变压器原理图符号,并生成各种库文件输出报表 1,绘制变压器原理图 2,添加封装 3,输出报表文件 三,绘制音乐集成芯片及LCD元件 1&…

Apache漏洞复现:【CVE-2021-42013】【CVE_2021_41773】【CVE-2017-15715】

声明 严禁读者利用本文介绍知识点对网站进行非法操作 , 本文仅用于技术交流和学习 , 如果您利用文章中介绍的知识对他人造成损失 , 后果由您自行承担 , 如果您不能同意该约定 , 请您务必不要阅读该文章 , 感谢您的配合 ! 远程代码执行 CVE-2021-42013 描述 Apache HTTP Ser…

R语言数据探索和分析21-中国GDP及其影响因素多元线性回归分析

一、研究背景和意义 GDP 是宏观经济中最受关注的经济统计数字,目前我国国内生产总值年均增长率均明显高于同期美、日等发达经济体和巴 西、俄罗斯、南非、印度等其他金砖国家,成为世界经济增长的主力军,GDP 的增长对一个国家有着十分重要的意…

mysql中事务的简介

大家好。我们在日常开发过程中肯定都或多或少的用到过事务,而且在面试时,数据库的事务也是必问内容之一。今天我们就来说说mysql的事务。 为了方便我们下面内容的讲解,我们也先建立一个讲事务必用的表–account表,并在表中插入两…

基于centos7打包当前环境的系统为iso镜像文件

1. 准备工作 1.下载安装mondo 切换到root用户,进入yum下载库 # cd /etc/yum.repos.d # wget ftp://ftp.mondorescue.org/centos/7/x86_64/mondorescue.repo 打开文件mondorescue.repo,修改gpgcheck属性为0,指定mondorescue.repo安装 # 安…

【Python数据挖掘实战案例】机器学习LightGBM算法原理、特点、应用---基于鸢尾花iris数据集分类实战

一、引言 1、简要介绍数据挖掘的重要性和应用 在数字化时代,数据已经成为企业和社会决策的重要依据。数据挖掘作为一门交叉学科,结合了统计学、机器学习、数据库技术和可视化等多个领域的知识,旨在从海量数据中提取有价值的信息&#xff0c…