как узнать, что команда pexpect действительно выполнялась?

У меня есть команда @ "tool --server=commander.company.com login username", которая запрашивает "Пароль". Я использую pexpect для запуска команды, ожидая ее и используя sendline для отправки пароля. При запуске нет ошибки, но эти команды, похоже, не запускаются. Как я могу знать, что это действительно работает?

child = pexpect.spawn ('tool --server=commander.company.com login username')
child.expect('Password:')
child.sendline('#password')

person user3654069    schedule 23.05.2014    source источник


Ответы (2)


child.isalive() и child.status полезны для определения статуса выполнения команды, однако pexpect .spawn также может быть передан открытый файл, в который будут записываться ввод и вывод. Затем вы можете увидеть, выполняется ли порожденный процесс так, как вы ожидаете, например.

import sys
child = pexpect.spawn('tool --server=commander.company.com login username', logfile=sys.stdout)
child.expect('Password:')
child.sendline('#password')

Это отправит все входные и выходные данные в ваш стандартный поток вывода. logfile_read и logfile_send также могут быть полезны.

person mhawke    schedule 23.05.2014

Есть две возможные вещи, которые вы можете проверить здесь:

  • p.isalive()

Метод isalive(self) экземпляра pexpect.spawn Проверяет, запущен дочерний процесс или нет. Это без блокировки. Если дочерний процесс был завершен, то будет прочитан статус выхода или статус сигнала дочернего процесса. Это возвращает True, если дочерний процесс работает, или False, если нет. Солярису может потребоваться буквально СЕКУНДЫ, чтобы вернуть правильный статус.

  • p.status

Пример:

>>> from pexpect import spawn
>>> p = spawn("ls")
>>> p.isalive()
False
>>> p.status
0

Подробнее см.: pexpect Documentnation

person James Mills    schedule 23.05.2014