Не удалось импортировать экземпляр paramiko - PullRequest
0 голосов
/ 06 августа 2020

Я написал класс, чтобы упростить подключение S SH, но происходили странные вещи:

# ssh_connect.py
# coding=utf-8
import paramiko


class SSH_Client(object):
    def __init__(self, hostname, port, username, password):
        self.ssh = paramiko.SSHClient()
        self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        self.ssh.connect(
            hostname=HOSTNAME,
            port=PORT,
            username=USERNAME,
            password=PASSWORD
        )
        self.sftp = None
        self.trans = None

    def run_command(self, command):
        if not command:
            raise ValueError("no command")
        stdin, stdout, stderr = self.ssh.exec_command(command)
        return stdout.read().decode()

    def get_current_files(self, path=None):
        command = ''
        if path:
            command += 'cd {};'.format(path)
        command += "ls -1 |awk '{print i$0}' i=`pwd`'/'"
        stdin, stdout, stderr = self.ssh.exec_command(command)
        return stdout.read().decode().split('\n')[:-1]

    def sftp_connect(self):
        self.trans = paramiko.Transport(
            sock=(HOSTNAME, PORT)
        )
        self.trans.connect(
            username="root",
            password="shhg1858Down"
        )
        self.sftp = paramiko.SFTPClient.from_transport(self.trans)

    def download_file(self, full_name):
        if not self.sftp:
            self.sftp_connect()
        local_name = './file/' + full_name.split('/')[-1]
        self.sftp.get(full_name, local_name)
        return local_name

    def __del__(self):
        if self.sftp:
            self.sftp.close()
        if self.trans:
            self.trans.close()
        self.ssh.close()

SSHCLient = SSH_Client("1.1.1.1", 111, 'user', "password")
if __name__ == '__main__':
    print(SSHCLient.get_current_files())
# do_something.py
# coding=utf-8
from ssh_connect import SSHCLient
import datetime

if __name__ == '__main__':
    print(SSHCLient.get_current_files())

ssh_connect.py работает хорошо, но когда я пытался импортировать экземпляр SSH_Client (SSHCLient) в do_sometion.py, соединение s sh не будет успешным, и программа зависнет.

Я сделал то же самое, используя cx_ oracle, и все прошло хорошо, Не знаю, о чем это.

...