Python Paramiko 将命令输出记录到文件
Python Paramiko log output of commands to a file
我正在编写一个脚本,它将获取服务器列表和 运行 service something restart ; service something status
命令。
为了做到这一点,我正在使用 paramiko SSHClient,具有以下功能:
def restart_service(node_name):
print('='*30 + ' Starting to work on ' + node_name + ' ' + '='*30 + '\n')
logging.info('Connecting to %s in order to restart %s...', node_name, service_name)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.load_system_host_keys()
ssh.connect(node_name)
channel = ssh.get_transport().open_session()
channel.exec_command(command)
while True:
if channel.exit_status_ready():
break
rl, wl, xl = select.select([channel], [], [], 0.0)
if len(rl) > 0:
print channel.recv(1024)
ssh.get_transport().close()
ssh.close()
我的问题是:如何设置 paramiko 记录器以将命令的输出也写入日志?我不需要获取所有调试信息,我只关心它,我也会在文件中获得服务重启和服务状态命令的结果。
我设置的记录器配置是:
logging.basicConfig(filename='./log_restartService.log', level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s')
logging.getLogger("paramiko").setLevel(logging.INFO)
我也尝试按照我发现的其他线程中的建议使用 logger = paramiko.util.logging.getLogger()
,但这也没有帮助..
谢谢!
不要使用 paramiko 记录器。而是创建你自己的。
import logging
logger = logging.getLogger(__name__)
def restart_service(node_name):
print('='*30 + ' Starting to work on ' + node_name + ' ' + '='*30 + '\n')
logging.info('Connecting to %s in order to restart %s...', node_name, service_name)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.load_system_host_keys()
ssh.connect(node_name)
channel = ssh.get_transport().open_session()
channel.exec_command(command)
while True:
if channel.exit_status_ready():
break
rl, wl, xl = select.select([channel], [], [], 0.0)
if len(rl) > 0:
# Log output
logger.info(channel.recv(1024))
ssh.get_transport().close()
ssh.close()
通过这种方式,您可以精确控制要记录的内容以及哪些信息对您很重要
我正在编写一个脚本,它将获取服务器列表和 运行 service something restart ; service something status
命令。
为了做到这一点,我正在使用 paramiko SSHClient,具有以下功能:
def restart_service(node_name):
print('='*30 + ' Starting to work on ' + node_name + ' ' + '='*30 + '\n')
logging.info('Connecting to %s in order to restart %s...', node_name, service_name)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.load_system_host_keys()
ssh.connect(node_name)
channel = ssh.get_transport().open_session()
channel.exec_command(command)
while True:
if channel.exit_status_ready():
break
rl, wl, xl = select.select([channel], [], [], 0.0)
if len(rl) > 0:
print channel.recv(1024)
ssh.get_transport().close()
ssh.close()
我的问题是:如何设置 paramiko 记录器以将命令的输出也写入日志?我不需要获取所有调试信息,我只关心它,我也会在文件中获得服务重启和服务状态命令的结果。
我设置的记录器配置是:
logging.basicConfig(filename='./log_restartService.log', level=logging.INFO, format='%(asctime)s %(levelname)s: %(message)s')
logging.getLogger("paramiko").setLevel(logging.INFO)
我也尝试按照我发现的其他线程中的建议使用 logger = paramiko.util.logging.getLogger()
,但这也没有帮助..
谢谢!
不要使用 paramiko 记录器。而是创建你自己的。
import logging
logger = logging.getLogger(__name__)
def restart_service(node_name):
print('='*30 + ' Starting to work on ' + node_name + ' ' + '='*30 + '\n')
logging.info('Connecting to %s in order to restart %s...', node_name, service_name)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.load_system_host_keys()
ssh.connect(node_name)
channel = ssh.get_transport().open_session()
channel.exec_command(command)
while True:
if channel.exit_status_ready():
break
rl, wl, xl = select.select([channel], [], [], 0.0)
if len(rl) > 0:
# Log output
logger.info(channel.recv(1024))
ssh.get_transport().close()
ssh.close()
通过这种方式,您可以精确控制要记录的内容以及哪些信息对您很重要