Как назвать декораторов с выходом? - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь настроить подключение SSH в моем сценарии.Функция SSH заботится о начальном и закрытом соединениях.Затем несколько функций используются для добавления функции SSH для получения некоторых данных.

, если я использую;следующий код работает нормально

def ssh(self):
    print('entering ...')
    self.ssh = SSHClient()
    self.ssh.load_system_host_keys()
    self.ssh.connect('localhst:8080')
    stdin, stdout, stderr = self.ssh.exec_command(
    'ls -al && pwd && cd /TivoData/Log/webservices/mind2-18030.dir/ && ls -al')
    stdout.channel.recv_exit_status()
    lines = stdout.readlines()
    for line in lines:
       print(line)
    yield self.ssh
    print('closing ...')
    self.ssh.close()

class SSHConnect:

    @pytest.yield_fixture
    def ssh(self, host):
        print('entering ...')
        self.ssh = SSHClient()
        self.ssh.load_system_host_keys()
        self.ssh.connect(host)
        yield self.ssh
        print('closing ...')
        self.ssh.close()


    def test_execute(self, ssh('localhost:8080'), command):
        stdin, stdout, stderr = self.ssh.exec_command(
            'ls -al && pwd && cd /home/bharath/ && ls -al')
        stdout.channel.recv_exit_status()
        lines = stdout.readlines()
        for line in lines:
            print(line)
        stdin.close()

obj = SSHConnect()
obj.test_execute()
  1. Как использовать ssh (anyhostofwish) и использовать его в test_execute?
  2. obj.test_execute () не работает, что использовать?
  3. self.ssh.exec_command ('ls -al && pwd && cd / home / bharath / && ls -al') выдает ошибку

1 Ответ

0 голосов
/ 15 мая 2019

Вы должны использовать Context Manager для соединения SSH вместо декоратора. Context Manager может гарантировать закрытие соединения SSH в каждом случае после ваших операций. Вот хороший пример реализации диспетчера контекста SSH: https://packetpushers.net/using-python-context-managers/

...