2

以下のようなシェルスクリプトスクリプトがあります。

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

ジャンク出力を取得しました。

ダイアログボックスからプレーンテキストを取得する方法はありますか?

ダイアログボックス付きのシェルスクリプトはサードパーティから提供されているため、スクリプトを変更することはできません:(。

シェルスクリプトを変更せずに解決策を提供してください。

4

1 に答える 1

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)

テキストが表示されます。ダイアログフレームからの行は引き続き含まれますが、処理しやすいはずです。

于 2011-12-08T00:08:20.627 に答える