【问题标题】:How to get text from dialog box in unix using pexpect?如何使用 pexpect 从 unix 对话框中获取文本?
【发布时间】:2012-01-13 19:33:07
【问题描述】:

我这里有一个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 Script是由第三方提供的,所以我们不能更改脚本:(。

请在不更改 shell 脚本的情况下提供解决方案。

【问题讨论】:

    标签: python shell unix dialog pexpect


    【解决方案1】:

    您看到的垃圾输出是 ANSI 转义码。你可以用这样的东西把它们去掉:

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

    那么,你可以使用

    strip_ansi(child.before)
    

    你只会看到文本。它仍然会包含对话框框架中的行,但这应该更容易处理。

    【讨论】:

    • 感谢 Glenn,这似乎对我们有帮助。让我实现它:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多