使用场景:多线程批量远程执行命令,会在检查某一主机时因为未知问题会卡住(网络或IO),需要设置超时限制,超时之后只是某个主机的命令执行失败,不影响整个程序运行。
paramiko 设置paramiko的执行命令等待超时的时间
ssh.exec_command(cmd,timeout=10)
执行命令超时会抛出异常 PipeTimeout
import paramiko chk_ip="1.1.1.91" chk_port="22" chk_username="oracle" chk_password="oracle" chk_timeout=3 # 休眠10秒 模拟执行超时 exec_cmd = """export LANG=EN_US.utf-8;df -h;sleep 10 """ ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接超时限制 ssh.connect(chk_ip,port=chk_port,username=chk_username, password=chk_password,look_for_keys=False,timeout=chk_timeout) # 执行命令超时限制 stdin, stdout, stderr = ssh.exec_command(exec_cmd,timeout=2) # 在readlines的时候会抛异常 PipeTimeout results = stdout.readlines() print(results) # 如果设置为11,比预设的休眠时间多1秒,执行通过,不能抛异常 stdin, stdout, stderr = ssh.exec_command(exec_cmd,timeout=11) results = stdout.readlines() print(results)
– 超时限制时,会抛出如下异常
Traceback (most recent call last):
File "/usr/local/python3/lib/python3.9/site-packages/paramiko-2.7.2-py3.9.egg/paramiko/channel.py", line 699, in recv
File "/usr/local/python3/lib/python3.9/site-packages/paramiko-2.7.2-py3.9.egg/paramiko/buffered_pipe.py", line 164, in read
paramiko.buffered_pipe.PipeTimeout
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/python3/lib/python3.9/site-packages/paramiko-2.7.2-py3.9.egg/paramiko/file.py", line 349, in readlines
File "/usr/local/python3/lib/python3.9/site-packages/paramiko-2.7.2-py3.9.egg/paramiko/file.py", line 291, in readline
File "/usr/local/python3/lib/python3.9/site-packages/paramiko-2.7.2-py3.9.egg/paramiko/channel.py", line 1361, in _read
File "/usr/local/python3/lib/python3.9/site-packages/paramiko-2.7.2-py3.9.egg/paramiko/channel.py", line 701, in recv
socket.timeout
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




