2011-12-06 4 views
2

나는 다음과 같이 여기 쉘 스크립트 스크립트가 :pexpect를 사용하여 유닉스에서 대화 상자의 텍스트를 가져 오는 방법은 무엇입니까?

#!/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 

지금 내 평 파일이 스크립트의 출력

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 

를 사용하는 경우

하지만 정크 출력을 얻었다.

대화 상자에서 일반 텍스트를 가져 오는 방법이 있습니까? 대화 상자

쉘 스크립트가 타사에 의해 주어진다 그래서 우리는 스크립트를 :(변경 기운 다.

쉘 스크립트를 변경하지 않고 솔루션을 제공하십시오.

답변

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 글렌이 도움이 될 것 같습니다. 저를 구현할 수 있습니다 :). – Nilesh

관련 문제