我有一个脚本,使用pexpect启动CLI程序。它类似于shell,您会得到一个提示符,可以输入一些命令。
我遇到的问题是,这个程序使用了彩色提示符。
我的做法如下:
import pprint
import pexpect
1 a = pexpect.spawn('program')
2 a.expect("prompt>")
3 print "---------start------------"
4 print(a.before)
5 a.sendline("command")
6 a.expect("prompt>")
7 print "---------before------------"
8 pprint.pprint(a.before)
9 print "---------after------------"
10 pprint.pprint(a.after)
这是输出结果:
> python borken.py
---------start------------
A lot of text here from the enjoying programs start-up, lorem ipsum ...
---------before------------
' \x1b[0m\x1b[8D\x1b[K\x1b[1m\x1b[34m'
---------after------------
'prompt>'
由于某些原因,第一个提示符的颜色编码会导致问题,而第8行的 a.before 是乱码,普通打印也无效,即使我看到第5行的命令实际上产生了大量输出。
有人知道问题可能是什么吗?或者在 pexpect 中是否可以设置终端类型以避免颜色?
我正在使用 tcsh shell。
PATH
。这似乎是一个设计不良的 API。对于大多数人来说,正确的用法应该是克隆 os.environ 并在修改后传递,类似于:env = dict(os.environ); env["TERM"] = "dump"; a = pexpect.spawn('program', env=env)
。 - haridsv