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()
Tại sao stdout.read() sẽ treo nếu sử dụng dierectly mà không kiểm tra stdout. channel.recv_ready(): trong khi stdout.channel.exit_status_ready():
Đối với trường hợp của tôi, sau khi chạy lệnh trên máy chủ từ xa, phiên đang đợi người dùng nhập, sau đặt 'q', nó sẽ đóng kết nối. Nhưng trước khi nhập 'q', giá trị thứ tự.read() sẽ đợi EOF, dường như methord này không hoạt động nếu bộ đệm lớn hơn.
- tôi đã cố gắng stdout.read (1) trong thời gian, nó hoạt động
tôi đã cố gắng stdout.readline() trong thời gian, nó cũng làm việc.
stdin, stdout, stderr = ssh.exec_command ('/ Users/lteue/Downloads/uecontrol')
stdout.read() sẽ treo
Nguồn
2016-09-28 07:39:47
Câu hỏi đặt ra là cũ nhưng đối với những người vẫn đến đây thông qua tìm kiếm google tôi muốn cung cấp cho họ this.The chìa khóa là để có được kênh ** của riêng bạn ** [Thực hiện các lệnh tương tác bằng Python thông qua Paramiko Phần 1] (https://www.youtube.com/watch?v=Jc2l- n_GYPI) [Thực hiện các lệnh tương tác bằng Python thông qua Paramiko Phần 2] (https://www.youtube.com/watch?v=lLKdxIu3-A4) Trong hai video này, giải thích cách chạy các lệnh tương tác thông qua paramiko, đặc biệt là video thứ hai là tuyệt vời và có lẽ những gì bạn cần. –