我在这里有一个shell脚本脚本,如下所示:
#!/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脚本的情况下提供解决方案。
答案 0 :(得分: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)
你会看到文字。它仍将包含对话框框架中的线条,但您应该更容易处理。