Этот ожидаемый скрипт запускает оболочку bash, которая включает приглашение:
#! /usr/bin/env expect
spawn -noecho "bash"
expect "$ "
send "echo 'Hello, "
interact
e.g. user@host:/path/to/working/directory$ echo 'Hello,
Я попытался сделать то же самое с Pexpect:
#! /usr/bin/env python
import pexpect
child = pexpect.spawn('bash')
index = child.expect("\$ ")
child.send("echo 'Hello, ")
child.interact()
Однако он проглатывает подсказку и показывает только echo 'Hello,
. Я могу заставить bash
перерисовать с помощью child.sendcontrol('l')
, но это работает только для некоторых оболочек; dash
, например, не поддерживает его.
$ python
Python 2.7.9 (default, Dec 11 2014, 08:58:12)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pexpect
>>> pexpect.__version__
'3.2'
logfile
вsys.stdout
, чтобы выводить все на стандартный вывод.send()
иsendline()
разные. В команде есть незакрытая одинарная кавычка. Используйтеexpect_exact()
для соответствия строке без регулярного выражения. - person jfs   schedule 05.03.2015.interact()
, будет напечатано, если не установлено.logfile*
. - person jfs   schedule 13.03.2015child.logfile = sys.stdout
действительно отображает подсказку, но имеет побочный эффект удваивания каждого ввода. Установка файла журнала во внешний файл показывает подсказку в этом файле, но не на экране. - person Nathaniel M. Beaver   schedule 13.03.2015