什么是这些奇怪的转义字符,我怎么解析/忽略它们?

时间:2018-06-08 22:59:58

标签: python bash

我正在尝试使用一些Python脚本运行经典的Zork,并且我在Frotz上取得了一些进步。这是我的代码:

import pexpect

dos = pexpect.spawn('frotz -dp /home/theuser/zork1/DATA/ZORK1.DAT')

dos.expect(">")
print(dos.before.decode('ascii'))

然后我运行脚本:

python test.py > output.txt

然而,输出如下:

u_setup.blorb_file /home/theuser/zork1/DATA/ZORK1.blb
u_setup.blorb_name ZORK1.blb
^[[?1049h^[[1;24r^[(B^[[m^[[4l^[[?7h^[[?1h^[=^[[H^[[2J^[(B^[[0;7m West of House                                    Score: 0        Moves: 0      ^[[14;1H^[(B^[[mZORK I: The Great Underground Empire
^[[15dCopyright (c) 1981, 1982, 1983 Infocom, Inc. All rights reserved.
^[[16dZORK is a registered trademark of Infocom, Inc.
^[[17dRevision 88 / Serial number 840726
^[[19dWest of House
^[[20dYou are standing in an open field west of a white house, with a boarded front
^[[21ddoor.
^[[22dThere is a small mailbox here.
^[[24d

所有那些转义序列是什么(^ [[15d,^ [[20d,^ [[24d,等])被称为?我认为它们与光标/控制台信息有关,因为当我运行脚本而不将输出重定向到文件时它们不会出现(并且终端移动了一点)。

我想要的只是Zork命令的输出:IE“你站在白宫西边的空地上,有一个登上的前门。这里有一个小邮箱。”

如何用Python剥离那些(控制序列?)?有没有我可以用于每个案例的正则表达式?

1 个答案:

答案 0 :(得分:3)

这些命令序列旨在由终端驱动程序解释。由于您没有使用终端驱动程序,因此您需要告诉frotz不要使用终端驱动程序。

oldterm = os.environ['TERM']
os.environ['TERM'] = 'dummy'
dos = pexpect.spawn('frotz ...')
os.environ['TERM'] = oldterm