2008-12-11 61 views
4

我有一個使用pexpect啓動CLI程序的腳本。它有點像一個shell,你可以在其中輸入一些命令。python,在終端中設置終端類型

我認爲,我有這個問題,該程序使用彩色提示。

這是我做的

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行borkens起來的東西,a.before是亂碼,正常打印不起作用,即使我看到第5行的命令實際上產生了很多輸出。

有人知道問題出在哪裏,或者是否可以設置終端類型以避免顏色?

我使用tcsh外殼

回答

8

好吧,我找到了答案。 csl的回答讓我走上了正確的道路。

pexpect有一個我認爲可以使用的「env」選項。像這樣:

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

但是,這產生一個新的外殼不工作對我來說,我們的開發環境 取決於很多環境變量:/

但是,如果我生成一個殼之前做到這一點:

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

我改變當前的「TERM」和「啞」不支持顏色,這解決了我的問題。

+1

任何想法爲什麼產生env = xxx參數在這裏不起作用? – Strin 2016-01-12 05:27:02

2

中找不到the pexpect documentation設置終端什麼,但你也許可以用一個shell明確啓動程序,然後設置終端類型有:

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和類似避免讀取初始化文件。檢查出bash man page

+0

這不起作用, 我得到: 提高ExceptionPexpect(「命令未找到或無法執行:%s」的%self.command) ExceptionPexpect:命令找不到或不可執行:TERM = VT100。 我不知道是否因爲我使用tcsh shell。 :/ – 2008-12-11 09:57:24