ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(server_IP,22,username, password)
stdin, stdout, stderr = ssh.exec_command('/Users/lteue/Downloads/uecontrol-CXC_173_6456-R32A01/uecontrol.sh -host localhost ')
alldata = ""
while not stdout.channel.exit_status_ready():
solo_line = ""
# Print stdout data when available
if stdout.channel.recv_ready():
# Retrieve the first 1024 bytes
solo_line = stdout.channel.recv(1024)
alldata += solo_line
if(cmp(solo_line,'uec> ') ==0 ): #Change Conditionals to your code here
if num_of_input == 0 :
data_buffer = ""
for cmd in commandList :
#print cmd
stdin.channel.send(cmd) # send input commmand 1
num_of_input += 1
if num_of_input == 1 :
stdin.channel.send('q \n') # send input commmand 2 , in my code is exit the interactive session, the connect will close.
num_of_input += 1
print alldata
ssh.close()
Почему stdout.read () будет зависать, если использовать напрямую без проверки stdout.channel.recv_ready (): в то время как stdout.channel.exit_status_ready ():
В моем случае, после запуска команды на удаленном сервере, сеанс ожидает ввода пользователя, после ввода 'q' соединение будет закрыто.
Но перед вводом 'q' stdout.read () будет ожидать EOF, кажется, этот меторд не работает, если буфер больше.
- Я пробовал stdout.read (1) в то время, как работает
Я попытался stdout.readline () в то время как, он также работает.
stdin, stdout, stderr = ssh.exec_command ('/ Users / lteue / Downloads / uecontrol')
stdout.read () будет зависать