Как получить текст из диалогового окна в Unix, используя Pexpect? - PullRequest
2 голосов
/ 06 декабря 2011

У меня есть скрипт сценария оболочки, как показано ниже:

#!/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 с диалоговым окном предоставлен третьей стороной, поэтому мы не можем изменить скрипт :(.

Пожалуйста, предоставьте решение без изменения сценария оболочки.

1 Ответ

3 голосов
/ 08 декабря 2011

Вывод нежелательной почты, который вы видите, является управляющими кодами ANSI.Вы можете вырезать их примерно так:

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

, затем вы можете использовать

strip_ansi(child.before)

, и вы просто увидите текст.Он по-прежнему будет содержать строки из диалоговых окон, но вам будет легче с ним справиться.

...