为什么 paramiko 偶尔会引发异常?

2024-03-06

为了方便起见,我编写了一个小包装类来登录远程主机,执行命令,结束检索数据:

def MySSHClient:

    def connect(self, remoteHost, remotePort, userName, password):
        self.__s = paramiko.SSHClient()
        self.__s.load_system_host_keys()
        self.__s.connect(remoteHost, remotePort, userName, password)

    def exec_command(self, command):
        bufsize = -1
        chan = self.__s.get_transport().open_session()
        chan.exec_command(command)
        stdin = chan.makefile('wb', bufsize)
        stdout = chan.makefile('r', bufsize)
        stderr = chan.makefile_stderr('r', bufsize)
        stdin.close()
        exitcode = chan.recv_exit_status()
        r = MySSHCommandResult(command, stdin, stdout, stderr, exitcode)
        chan.close()
        return r

    def close(self):
        self.__s.close()

该代码改编自原始的 paramiko python 实现。我刚刚添加了最后 5 行。

(仅供参考:MySSHCommandResult 在构造期间从 stdout 和 stderr 读取所有数据并将其存储以供进一步使用。)

MySSHClient 类在一个简单的 python 程序中使用:

....

exitCode = 0
s = None
try:
    ....
    exitCode = 3
    s = MySSHClient()
    s.connect(host, port, login, password)
    exitCode = 4
    result = s.exec_command(myCommand)
    exitCode = 5
    if not result.isSuccess():
        raise Exception("Failed to execute command!")
    result.dump()    # for current debugging purposes
    exitCode = 0
except:
    pass

if s is not None:
    s.close()
sys.exit(exitCode)

(通过这些退出代码,Python 程序告诉调用者一切是否成功。如您所见,使用了各种退出代码,以便在失败时进行一些错误诊断。)

到目前为止,一切都很好。基本上这是有效的。但我不明白的是,有时我的 python 程序会提供如下额外的输出:

Exception ignored in: <bound method BufferedFile.__del__ of <paramiko.ChannelFile from <paramiko.Channel 0 (closed) ->     <paramiko.Transport at 0x74300588 (unconnected)>>>>
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/paramiko/file.py", line 61, in __del__
  File "/usr/local/lib/python3.5/dist-packages/paramiko/file.py", line 79, in close
  File "/usr/local/lib/python3.5/dist-packages/paramiko/file.py", line 88, in flush
TypeError: 'NoneType' object is not callable

或者像这样:

Exception ignored in: <object repr() failed>
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/paramiko/file.py", line 61, in __del__
  File "/usr/local/lib/python3.5/dist-packages/paramiko/file.py", line 79, in close
  File "/usr/local/lib/python3.5/dist-packages/paramiko/file.py", line 88, in flush
TypeError: 'NoneType' object is not callable

一切都一直工作正常,但大约有 10% 到 20% 的时间我会看到这些错误消息。有谁知道为什么有时清理会在程序终止时失败?我怎样才能避免这些错误消息?


由于某种原因,sys.exit 时垃圾不会自动清理

要手动强制清理,您可以简单地删除分配的对象del.

这是我的代码:

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host, port, username, password)
stdin_raw, stdout_raw, stderr_raw = client.exec_command(cmd)
exit_code = stdout_raw.channel.recv_exit_status() 

stdout = []
for line in stdout_raw:
    stdout.append(line.strip())

stderr = []
for line in stderr_raw:
    stderr.append(line.strip())


# Clean up elements
client.close()
del client, stdin_raw, stdout_raw, stderr_raw


logger.debug("stdout: %s" % stdout)
logger.debug("stderr: %s" % stderr)
logger.debug("exit_code: %s" % exit_code)

请注意这一行:

del client, stdin_raw, stdout_raw, stderr_raw

这是我的来源:https://github.com/paramiko/paramiko/issues/1078#issuecomment-596771584 https://github.com/paramiko/paramiko/issues/1078#issuecomment-596771584

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 paramiko 偶尔会引发异常? 的相关文章

  • TypeError:在 Python 3.8.1 上运行 Pytest 脚本时,参数中缺少必需字段“posonlyargs”

    我在 Python 3 8 1 上创建了一个简单的 Selenium Pytest 自动化脚本 运行脚本后 我看到以下错误 Traceback most recent call last Error messages TypeError r
  • 在 PYTHON 中读取 EXCEL 时,“utf-16-le”编解码器无法解码字节

    我正在尝试读取不同语言 阿拉伯语 希腊语 意大利语 希伯来语等 的各种数量的 xls 文件 当我尝试调用 open workbook 函数时 出现如下所示的错误 不知道如何将格式设置为任何语言 Code book xlrd open wor
  • 在 python 中将变量传递给重定向上的模板

    我对 Python 比较陌生 所以请原谅任何幼稚的问题 我的主页有 2 个输入 一个用于 产品 一个用于 电子邮件 当用户单击 提交 时 他们应该被发送到 success 其中会显示 您已请求 产品 您将通过 电子邮件 收到通知 我试图找出
  • 如何在 python 3.x 中使用 string.replace()

    The string replace 在 python 3 x 上已弃用 这样做的新方法是什么 与 2 x 一样 使用str replace https docs python org library stdtypes html str r
  • 用于将 cython 中的许多 C++ 类包装到单个共享对象的项目结构

    我在文档 邮件列表和这个问题在这里 https stackoverflow com questions 10300660 cython and distutils 但我想得到一个更直接的答案来解决我的具体情况 我正在通过尝试一点一点地包装我
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • 如何使用受密码保护的私有 ssh 密钥连接 MySQL Workbench?

    我在使用受密码保护的密钥通过 SSH 连接工作台时遇到问题 我不知道必须将密码密钥放在工作台中的何处 它告诉我 无 拒绝访问 可以继续的身份验证 公钥 我的凭据正确 我可以使用同一用户通过终端 SSH 连接 所以这让我认为这是因为我的 ss
  • 使用 pythonbrew 编译 Python 3.2 和 2.7 时出现问题

    我正在尝试使用构建多个版本的 python蟒蛇酿造 http pypi python org pypi pythonbrew 0 7 3 但我遇到了一些测试失败 这是在运行的虚拟机上 Ubuntu 8 04 32 位 当我使用时会发生这种情
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe

随机推荐

  • Android - 在 Eclipse 中创建新活动 [重复]

    这个问题在这里已经有答案了 简单的一个 我已经阅读了一些指南和教程 它们非常清楚如何开始一项活动 有目的 但是 如何在 Eclipse 中创建新活动 我可能可以手动完成此操作 但随后我必须修改R文件 自动生成 并添加新的 xml 布局 好的
  • pandas 有没有办法将 read_sql() 与 sql 语句一起使用,该语句需要多个变量?

    这是我的代码的一部分 我已经有一个包含值的数据库 并且需要根据该数据帧中的值创建一个新的数据帧 目前这些值只有 12 和 13 存储在header row ids多变的 当我运行脚本时 我收到以下错误消息 pandas io sql Dat
  • 当 Web API 中没有发布数据时,避免使用 null 模型

    这个问题与我想要实现的目标类似 当没有发布的属性与模型匹配时 避免在 ASP Net Web API 中使用 null 模型 https stackoverflow com questions 25160345 avoiding null
  • 每次击键都会调用 api

    我尝试创建这个反应网站 我可以在其中搜索一个地方 我遇到一个问题 因为每当我在搜索框中输入新字母时 就会调用 api 这会使网站非常慢 我不希望它每次击键时都调用 api 我认为这是因为第二个 useEffect 但如果我删除该 useEf
  • 如何更改 LaTeX 中的文档字体?

    如何将整个文档的字体更改为无衬线字体 或其他字体 感谢文森特答案中的链接 我找到了解决方案 renewcommand familydefault sfdefault 这会将默认字体系列更改为无衬线字体
  • 为什么invalidate()之后不调用onDraw?

    我在 stackoverflow 上找到了很多帖子 但仍然无法解决我的问题 这是我的代码片段 public class MyView extends RelativeLayout Button b1 Button b2 Context sC
  • 如何知道用户是否在 Telegram 中看到了我的机器人发送的消息?

    我正在开发一个 Telegram 机器人 我想知道与我的机器人开始私人聊天的用户是否已经看到机器人发送的特定消息 并想知道他什么时候看到的 可以这样做吗 非常感谢 目前这是不可能的
  • 找不到方法:Microsoft.AnalysisServices

    我已经使用 SSIS 包为数据仓库创建了 ETL 设置 一切都工作正常 直到最后一步 即 分析服务处理任务编辑器 每当我添加立方体并按 确定 时 我都会收到以下错误 找不到方法 Void Microsoft AnalysisServices
  • 如何删除 Xcode 9 中标记单词上插入的双引号

    Xcode 9 中的这个新功能seems没问题 但我无法习惯它 而且在大多数情况下 它要求我比旧的本机函数做更多的工作 如何防止 Xcode 引用标记的单词 而不是用单引号替换标记的单词 在这种情况下 当标记单词时Text并击中 我想要的结
  • AppDomain.UnhandledException 未捕获未处理的异常

    我们有一个 NET 3 5 程序集 dll 由 VB6 代理 exe 通过 COM 接口执行 VB6 代码确实调用 Ensure that no system dialog comes up when we GPF PreviousErro
  • JPA 和数据库中的列顺序

    我使用 Eclipselink 作为我的持久性提供程序 有什么方法可以指定列在数据库中出现的顺序吗 数据库中的列顺序与我的实体中的属性顺序不匹配 据我了解按字母顺序排列的休眠顺序列 但我找不到 Eclipselink 的任何规范 Eclip
  • 如何修改 Poly3DCollection 对象的 zdata?

    我当前正在修改 Line2D 对象的 xdata 和 ydata 属性 如下所示 plt setp ph xdata event xdata ydata event ydata thisline figure canvas draw 我想对
  • 何时在 Python 的 AST 中使用 ExtSlice 节点?

    绿树蛇 http greentreesnakes readthedocs org en latest index html gives 一个例子 http greentreesnakes readthedocs org en latest
  • OpenGL 和 WebGL 的 Alpha 渲染差异

    I m rendering the same scene using the same exact C code once to native OpenGL on windows and once using Emscripten to W
  • 用于 JSON 请求的 AlamoFire 异步完成处理程序

    使用 AlamoFire 框架后 我注意到completionHandler 在主线程上运行 我想知道下面的代码是否是在完成处理程序中创建核心数据导入任务的好习惯 Alamofire request GET http myWebSite e
  • 依赖的非类型模板参数和可变参数模板

    我正在尝试扩展提供的可能性std integer sequence http en cppreference com w cpp utility integer sequence一个名为的新类integer range 显然 这在两个边界之
  • 如何使用 RVM 重新编译 ruby​​?

    我使用 RVM 安装了 Ruby 1 9 3 并且运行良好 然后我在 ruby C 源文件中进行了一些更改 我想重新编译并重新安装它 以便可以使用这些更改 我还没有找到任何类型的rvm重新编译然而命令 使用时出现的问题rvm reinsta
  • 如何在 DataGridViewImageColumn 中添加图像?

    我有一块田地DataGridViewImageColumn 对于字段的每一行 根据条件 我添加不同的图像 有人知道我如何在 Windows 窗体中执行此操作吗 if dgvAndon Rows e RowIndex Cells urgenc
  • WordPress 在管理中提供本机日期选择器吗?

    我正在开发一个插件 并在管理中提供一个由用户填写日期的字段 我想知道 WP Admin I 中是否有可用的本机日期选择器 我通常会包含一个小的 jQuery datepicker 脚本来执行此操作 但如果一个已经可用 我会更喜欢它 因为明显
  • 为什么 paramiko 偶尔会引发异常?

    为了方便起见 我编写了一个小包装类来登录远程主机 执行命令 结束检索数据 def MySSHClient def connect self remoteHost remotePort userName password self s par