Используя Paramiko, я создаю ssh для подключения к моей удаленной машине, затем вызываю exec_command для запуска следующего:
psql usera
Обычно exec_command
возвращает кортеж stdin
, stdout
и stderr
.Поэтому я использую stdin
для записи CREATE DATABASE X
с '\n'
в конце для имитации кнопки ввода.Команда отнимает много времени до такой степени, что выглядит как застрявшая.
Вот мой код:
stdin, stdout, stderr = self.ssh.exec_command('psql usera')
print('executed')
print(stdin)
print(stdout)
print(stderr)
for err in stderr:
print(err)
for std in stdout:
print(std)
stdin.write('CREATE DATABASE ' + db_name + ';\n')
Этот код выведет следующее:
executed
<paramiko.ChannelFile from <paramiko.Channel 2 (open) window=2097152 -> <paramik
o.Transport at 0x36a29b0 (cipher aes128-ctr, 128 bits) (active; 3 open channel(s
))>>>
<paramiko.ChannelFile from <paramiko.Channel 2 (open) window=2097152 -> <paramik
o.Transport at 0x36a29b0 (cipher aes128-ctr, 128 bits) (active; 3 open channel(s
))>>>
<paramiko.ChannelFile from <paramiko.Channel 2 (open) window=2097152 -> <paramik
o.Transport at 0x36a29b0 (cipher aes128-ctr, 128 bits) (active; 3 open channel(s
))>>>
2018-12-12 19:22:39; DEBUG; EOF in transport thread
Это означает, что код не выполняется stdin.write()
.Это правильный способ запуска команд и запуска команд по приглашению?