2011-12-06 5 views
2

私は以下のように、ここでシェルスクリプトスクリプトを持っている: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 

を使用する場合、私はジャンク出力を得ました。

プレーンテキストをダイアログボックスから取得する方法はありますか?ダイアログボックスでシェルスクリプトが第三者によって与えられ

ので、スクリプトを変更傾ける:(。

をシェルスクリプトを変更せずにソリューションを提供してください。

答えて

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

関連する問題