我有一个使用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>'

出于某种原因,第一提示颜色编码borkens向上事物和a.before在管线8是乱码,正常打印不工作,即使我看到,在第5行的指令实际产生大量的输出。

没有人知道这个问题可能是什么,或者是否有可能设置终端类型Pexpect的避免了颜色?

我使用tcsh外壳

有帮助吗?

解决方案

好,我找到了答案。 CSL的回答让我在正确的道路上。

Pexpect的具有想到可以使用“ENV”选项。像这样:

a = pexpect.spawn('program', env = {"TERM": "dumb"})

但是,这产生一个新的外壳不工作对我来说,我们的开发环境 取决于很多环境变量:/

但是,如果我产卵一个壳之前做到这一点:

import os
os.environ["TERM"] = "dumb"

我改变目前的“术语”和“哑巴”不支持的颜色,这固定我的问题。

其他提示

中找不到设置终端Pexpect的文档什么,但你很可能带外壳明确启动你的程序,然后将终端类型有:

shell_cmd = 'ls -l | grep LOG > log_list.txt'
child = pexpect.spawn('/bin/bash', ['-c', shell_cmd])
child.expect(pexpect.EOF)

您可以尝试像

child = pexpect.spawn('TERM=vt100 /bin/bash', ['-c', shell_cmd])

您也可以启动庆典与--norc和类似避免读取初始化文件。退房href="http://linux.die.net/man/1/bash" rel="nofollow noreferrer"> bash帮助页面的

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top