在处理Python中使用paramiko库进行远程命令执行时,经常会遇到因长时间运行命令而导致的超时问题。Paramiko是一个用于进行SSH2远程连接的库,提供了客户端和服务器的功能。使用paramiko可以实现远程执行命令、文件传输等操作。 我们来解析标题和描述中提到的“paramiko执行命令超时问题”以及解决办法。在paramiko执行命令时,如果不加任何额外配置,客户端会等待命令执行完毕,并获取其返回结果。如果命令需要较长时间才能完成,比如涉及到大量数据处理或需要执行耗时较长的操作,客户端就需要等待较长时间,可能会出现超时的情况。 描述中提及了两种主要的解决方案: 方案一:使用nohup+待执行命令+&的方式,即在远程命令执行时使用后台运行的方式。这样命令的执行不会阻塞SSH会话,客户端可以立即返回。例如: ``` stdin, stdout, stderr = self.client.exec_command('nohup sh ~/test.sh &', get_pty=True) ``` 然而这种方法也有局限性,因为它可能无法解决命令执行时间远远超出客户端设定的超时时间限制的问题。 方案二:设置paramiko的执行命令等待超时时间,即在调用`exec_command`函数时指定`timeout`参数。例如: ``` stdin, stdout, stderr = self.client.exec_command(cmd, timeout=10, get_pty=True) ``` 这个方法同样有不足之处,因为如果指定的超时时间小于实际命令运行时间,那么命令执行会失败,从而导致超时错误。 最终,文章中提供了一个更有效的解决方案。当远程执行长时间运行的脚本时,会遇到一种“阻塞”的情况。为了避免这种情况,可以将长时间运行的命令脚本嵌入到另一个脚本中,并在远程执行这个外层脚本。例如,创建一个名为`run.sh`的脚本,其内容是后台运行长时间的命令: ``` #!/bin/bash bash /tmp/test.sh & echo "runok!" exit 0 ``` 然后通过paramiko执行`run.sh`脚本。为了进一步确保SSH会话不等待长时间命令的完成,可以将标准输出(stdout)重定向到标准错误输出(stderr),这样paramiko就不再依赖于标准输出的返回信息来判断命令是否结束。具体操作如下: ``` stdin, stdout, stderr = client.exec_command("bash /tmp/run.sh 1>&2") ``` 这种方式允许命令在后台运行,同时远程会话可以立即得到输出,并继续执行后续操作,无需等待长时间命令的完成。 文章还提供了具体的操作步骤和脚本示例,帮助理解如何使用paramiko进行远程命令执行,并处理执行超时问题。编写测试脚本,包括一个长时间运行的`test.sh`脚本和一个触发它的`run.sh`脚本。然后,通过paramiko的`test.py`脚本来执行远程命令,并通过重定向标准输出到错误输出来快速得到远程命令的执行结果。 在实际使用paramiko进行远程操作时,掌握以上方法对于高效执行远程脚本和处理超时问题非常重要。合理地安排后台运行和输出重定向,可以有效避免超时错误,提高脚本的执行效率和稳定性。





















- 粉丝: 2
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 网络工程师学习笔记共享共章.doc
- 中国物流供需与中国物流网络.doc
- 基于单片机的电子钟设计.doc
- 基于FPGA的SPI接口设计-徐慧军.doc
- 计算机教师总结.docx
- 微软学科培训-学员手册2014.6.doc
- 基于单片机的步进电机控制系统汇编及C语言程序各一个样本.doc
- 小学生网络安全黑板报.docx
- 数字图像处理入门.ppt
- 计算机专业实习调研报告.doc
- 网络舆情工作总结范文合集.doc
- 计算机网络基础考试试题4(最终).doc
- 软件需求说明书.doc
- 信息化发展战略选择课件.pptx
- 微机原理与接口技术吉海彦主编机械工业出版社课后习题答案.doc
- 网络优化暑期社会实践心得体会.docx


