2016-05-11 4 views
0

Я настраиваю удаленное SSH-соединение на удаленный сервер и запускаю определенную команду для сброса таблицы DB. Удаленный сервер - это упрочненная ОС Linux с собственной оболочкой. Я запускаю команду удаленного sql-типа для выгрузки большого количества данных. Мой скрипт python использует интерактивную сессию SSH для этого. Как вы можете видеть ниже, я запускаю команду, позволяя ей спать в течение 5 секунд, а затем сбросить буфер. Я пробовал много разных опций для функции «remote_conn.recv()», но я не могу получить полный вывод. Выход очень большой, и он выгружается (нажмите пробел для увеличения). Я даже не получаю полный вывод первой страницы. Если на первой странице 50 строк, я получаю только первые 4.Python Paramiko get full output

Есть ли лучшие способы сделать это? Как я могу просто получить полный выход? Ниже приведена часть Paramiko моего скрипта.

# Create instance of SSHClient object 
remote_conn_pre = paramiko.SSHClient() 

# Automatically add untrusted hosts 
remote_conn_pre.set_missing_host_key_policy(
    paramiko.AutoAddPolicy()) 

# initiate SSH connection 
remote_conn_pre.connect(options.ip, username=options.userName, password=options.password) 

# Use invoke_shell to establish an 'interactive session' 
remote_conn = remote_conn_pre.invoke_shell() 

remote_conn.send("<remote sql command here>") 
time.sleep(5) 
output = remote_conn.recv(65535) 

print output 
remote_conn.close() 
+0

Почему вы не используете SQL-клиент direclty? – Maresh

+0

ОС - это упрочненный Linux с собственной оболочкой. Я должен запускать свои собственные команды из CLI. Это не стандартный вызов SQL, и вы не можете получить к нему доступ удаленно, иначе я бы пошел по этому маршруту. – hiddenicon

+0

Разрешен ли SCP на этой машине? – Maresh

ответ

0

Я был в состоянии получить полную мощность, захватывая более мелкие куски буфера и concat'ing их вместе, пока я не достиг определенной строки в буфере.

while True: 
    data = remote_conn.recv(500) 

    if "<string>" in data: 
     break 
    else: 
     finalOutput += data