请优化这段代码 def ssh_client(ip, username, password, command, aliasname, port=22) -> None: """远程执行命令的方法""" ssh = SSHClient() ssh.set_missing_host_key_policy(AutoAddPolicy) try: ssh.connect(ip, username=username, port=port, password=password) stdin, println, error = ssh.exec_command(command) logging.info("执行重启的服务:%s" % aliasname) logging.warning("执行结果:%s" % println.read()) logging.warning("执行错误信息:%s" % error.read()) except Exception as E: logging.exception("远程执行命令的方法报错:%s\n详细:%s" % (E, traceback.format_exc())) finally: ssh.close()
时间: 2023-12-09 10:06:38 浏览: 142
以下是代码优化的建议:
1. 在函数注释中添加参数和返回值的说明。
2. 使用 with 语句,确保连接对象在使用完后能够正确关闭。
3. 使用 try-except-finally 块,确保连接对象发生异常时能够正确关闭。
4. 将日志记录的级别从 warning 降低为 info,因为执行结果和错误信息都是正常输出,不需要警告级别。
5. 使用 format() 方法,将字符串拼接改为格式化输出。
优化后的代码如下:
```
import logging
import traceback
from paramiko import SSHClient, AutoAddPolicy
def ssh_client(ip: str, username: str, password: str, command: str, aliasname: str, port: int = 22) -> None:
"""
远程执行命令的方法
:param ip: 目标主机IP地址
:param username: 用户名
:param password: 密码
:param command: 要执行的命令
:param aliasname: 服务别名
:param port: 端口号,默认22
"""
ssh = SSHClient()
ssh.set_missing_host_key_policy(AutoAddPolicy)
try:
ssh.connect(ip, username=username, port=port, password=password)
with ssh.exec_command(command) as (stdin, stdout, stderr):
logging.info("执行重启的服务:{}".format(aliasname))
logging.info("执行结果:{}".format(stdout.read().decode()))
logging.info("执行错误信息:{}".format(stderr.read().decode()))
except Exception as e:
logging.exception("远程执行命令的方法报错:{}\n详细:{}".format(e, traceback.format_exc()))
finally:
ssh.close()
```
注意:以上代码只是一种优化方式,具体优化方案需要根据实际需求和情况进行调整。
阅读全文