2011-12-06 25 views
2

我在這裏有一個shell腳本,腳本如下:如何使用pexpect從unix中的對話框中獲取文本?

#!/bin/bash 
CPUSELECTION="1 386SX off \ 
       2 386DX on \ 
       3 486SX off \ 
       4 486DX off " 
#dialog --backtitle "Select CPU" --radiolist "Select the cpu" 10 40 4 $CPUSELECTION 
echo $CPUSELECTION 

現在我的PY文件

import pexpect 

child = pexpect.spawn ('sh /tmp/test.sh') 
child.expect('386DX') 
fp = open('/tmp/test.txt', 'w') 

print >> fp, "Before 386DX:", child.before 
print >> fp, "After 386DX:", child.after 


child.expect('486SX') 
print >> fp, "Before 486SX:", child.before 
print >> fp, "After 486SX:", child.after 

fp.close() 

這個腳本的輸出

$ cat /tmp/test.txt 
Before 386DX: 1 386SX off 2 
After 386DX: 386DX 
Before 486SX: on 3 
After 486SX: 486SX 

從此我將獲得一些文本之間的文本。

但是,如果使用對話框

#!/bin/bash 
CPUSELECTION="1 386SX off \ 
       2 386DX on \ 
       3 486SX off \ 
       4 486DX off " 
dialog --backtitle "Select CPU" --radiolist "Select the cpu" 10 40 4 $CPUSELECTION 
#echo $CPUSELECTION 

我得到了垃圾輸出。

有什麼辦法從對話框中獲取純文本?

shell腳本對話框,由第三方給予,所以我們不能改變劇本:(。

請提供解決方案,無需改變shell腳本。

回答

3

,你所看到的垃圾輸出爲ANSI轉義碼你可以帶他們出去的東西是這樣的:

ansi_codes = re.compile('\033\[[0-9;]+m') 
def strip_ansi(with_ansi): 
    return ansi_codes.sub('', with_ansi) 

然後,你可以使用

strip_ansi(child.before) 

你只會看到文字。它仍然包含對話框中的行,但應該更容易處理。

+1

Thx Glenn這似乎對我們很有幫助。讓我實現:)。 – Nilesh

相關問題