У меня проблемы с передачей ответов на bash-скрипт на удаленном сервере через SSH.
Я пишу программу на Python 3.6.5, которая будет SSH на удаленный сервер Linux.На этом удаленном Linux-сервере есть запущенный мной bash-скрипт, для заполнения которого требуется ввод данных пользователем. По какой-то причине я не могу передать пользовательский ввод из моей исходной программы на Python через SSH и заставить его заполнить вопросы ввода пользователем bash-скрипта.
main.py
from tkinter import *
import SSH
hostname = 'xxx'
username = 'xxx'
password = 'xxx'
class Connect:
def module(self):
name = input()
connection = SSH.SSH(hostname, username, password)
connection.sendCommand(
'cd xx/{}/xxxxx/ && source .cshrc && ./xxx/xxxx/xxxx/xxxxx'.format(path))
SSH.py
from paramiko import client
class SSH:
client = None
def __init__(self, address, username, password):
print("Login info sent.")
print("Connecting to server.")
self.client = client.SSHClient() # Create a new SSH client
self.client.set_missing_host_key_policy(client.AutoAddPolicy())
self.client.connect(
address, username=username, password=password, look_for_keys=False) # connect
def sendCommand(self, command):
print("Sending your command")
# Check if connection is made previously
if (self.client):
stdin, stdout, stderr = self.client.exec_command(command)
while not stdout.channel.exit_status_ready():
# Print stdout data when available
if stdout.channel.recv_ready():
# Retrieve the first 1024 bytes
alldata = stdout.channel.recv(1024)
while stdout.channel.recv_ready():
# Retrieve the next 1024 bytes
alldata += stdout.channel.recv(1024)
# Print as string with utf8 encoding
print(str(alldata, "utf8"))
else:
print("Connection not opened.")
Последний /xxxxxx
в классе Connect
- это запущенный удаленный скрипт.Откроется текстовый ответ в ожидании формата, например
Как вас зовут:
, и я не могу найти способ правильно передать ответ сценариюиз моего main.py
файла в классе Connect
.
Каждый раз, когда я пытался передать name
в качестве аргумента или переменной, ответ, кажется, просто исчезает (вероятно, так как он пытается его напечататьв приглашении Linux, а не в скрипте bash)
Я думаю, использование функции read_until
для поиска :
в конце вопроса может сработать.
Предложения?