使用场景:多线程批量远程执行命令,会在检查某一主机时因为未知问题会卡住(网络或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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




