Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 14, 2014 19:47:53

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Не получается получить вывод команды с помоцью pexpect

Здравствуйте! Пытаюсь автоматизированно собрать информацию с удаленных машин, но вот даже с uname проблема.
Видимо, Я не могу до конца понять принцип pexpect

import pexpect
..............................
def execute_cmd(connection, cmd):
    #connection.expect('.*')
    connection.send(cmd)
    connection.expect('.*')
    return connection.before + '\n' + connection.after
   
def execute_remote_command(cmd, host, username='testuser', password='testpass'):
    connection = pexpect.spawn("ssh %s@%s -o 'StrictHostKeyChecking=no' -o 'UserKnownHostsFile /dev/null'" % (username, host), maxread=1)
    connection.expect('.*(P|p)assword.*')
    connection.sendline(password)
    connection.expect('.*')
    output = execute_cmd(connection, cmd)
    return output
   
def get_host_info(host):
    #myclient = hostclient.HostClient([host],sudo=False,username='testuser',password='ironport')
    #output, code = myclient.execute('cat /etc/motd')
    output = execute_remote_command('uname -a', host)                                                                                                                                                              
    return output
   
..................
hosts_to_process = (host1, host2, ... hostN)
  
for item in hosts_to_process:
    print 'Processing %s\n' % item
    with open(fn, 'a') as f:
        host_info = get_host_info(item)
        f.write(item + '\n')
        f.write(host_info)

В вобщем в файле имеется только имя хоста (не вывод команды uname -a, а имена хостов со списка) и пустые строки:

host1

host2

.....

hostN



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Отредактировано Master_Sergius (Авг. 14, 2014 19:48:26)

Офлайн

#2 Авг. 15, 2014 16:57:50

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Не получается получить вывод команды с помоцью pexpect

Всё-таки Я разобрался самостоятельно. Он такой редиска, этот pexpect, что ему нужно явно указать ожидание приглашения для ввода, вот вместо этого:

connection.expect('.*')

Надо вот это:
connection.expect('[#$] ')

Пробел перед кавычкой - обязательно!
Долго мучился, читал, экспериментировал. Что ж, теперь надо двигаться в сторону paramico или Fabric



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version