首页 > 解决方案 > 使用 paramiko exec 命令获取日志文件内容

问题描述

鉴于:

import os
import sys
import paramiko
from os.path import expanduser
import json


def getToken(hostname):
    home = expanduser("~")
    print(home)
    command = """python getLog.py 834214214"""
    conf = paramiko.SSHConfig()
    # print(os.path.expanduser(home+'/.ssh/config'))
    conf.parse(open(home + '/.ssh/config'))
    host = conf.lookup(hostname)
    client = paramiko.SSHClient()
    client.load_system_host_keys()
    print(host)
    # client.set_missing_host_key_policy('AutoAddPolicy')

    client.connect(
        host['hostname'], username=host['user'],
        key_filename=host['identityfile'],
        banner_timeout=30, auth_timeout=10,
        sock=paramiko.ProxyCommand(host.get('proxycommand'))
    )
    print("dupa conectare")
    stdin, stdout, stderr = client.exec_command(command)
    print('exec comanda')
    stdin.write('Yes\n')
    paramiko.util.log_to_file("paramiko.log")
    print('logged paramiko')
    r_stdout = stdout.read().decode("utf-8").rstrip()
    print('got STDOUT')
    client.close()
    # print(r_stdout)
    with open("log.txt", 'w') as file:
        file.write(str(r_stdout))
    print('wrote 2 file')
    return r_stdout


if __name__ == "__main__":
    getToken('dex2')

getLog.py 内容:

import os
import subprocess
import sys
def getLog(identifier):
    import sys
    #identifier = sys.argv[1]
    os.chdir('/users/gen/dexpwrk1/DIGITAL/logs/')
    fileName = subprocess.check_output("grep -il '{}' *".format(identifier), shell=True)
    fileName = fileName.split(" ")[-1]
    f = open(fileName.replace('\n', ''), "r")
    print f.read()
    return str(f.read())


#if __name__ == '__main__':
getLog(sys.argv[1])

我想要完成的是通过隧道连接到 linux 机器,使用 paramiko 并获取完整的日志文件,这可能非常大,上面的代码示例有效,但速度非常慢。

这段代码耗时最长:

r_stdout = stdout.read().decode("utf-8").rstrip()

我将在休息服务中使用它,以开始执行顺便说一句,就像 fyi

标签: pythonpython-3.xlinuxunix

解决方案


推荐阅读