捕获pexpect的输出

时间:2012-10-10 17:50:51

标签: python mathml pexpect

我遇到pexpect时遇到问题。我正试图从tralics中获取输出,该输出读取乳胶方程式并发出MathML表示,如下所示:

1 ~/ % tralics --interactivemath
This is tralics 2.14.5, a LaTeX to XML translator, running on tlocal
Copyright INRIA/MIAOU/APICS/MARELLE 2002-2012, Jos\'e Grimm
Licensed under the CeCILL Free Software Licensing Agreement
Starting translation of file texput.tex.
No configuration file.
> $x+y=z$
<formula type='inline'><math xmlns='http://www.w3.org/1998/Math/MathML'><mrow><mi>x</mi>   <mo>+</mo><mi>y</mi><mo>=</mo><mi>z</mi></mrow></math></formula>
> 

所以我尝试使用pexpect获取公式:

import pexpect
c = pexpect.spawn('tralics --interactivemath')
c.expect('>')
c.sendline('$x+y=z$')
s = c.read_nonblocking(size=2000)
print s

输出具有公式,但是开头的原始输入和结尾处的一些控制字符:

"x+y=z$\r\n<formula type='inline'><math xmlns='http://www.w3.org/1998/Math/MathML'><mrow><mi>x</mi><mo>+</mo><mi>y</mi><mo>=</mo><mi>z</mi></mrow></math></formula>\r\n\r> \x1b[K"

我可以清理输出字符串,但我必须遗漏一些基本的东西。是否有更简洁的方法来获取MathML?

1 个答案:

答案 0 :(得分:4)

根据我的理解,你试图从pexpect获得这个:

<formula type='inline'><math xmlns='http://www.w3.org/1998/Math/MathML'><mrow><mi>x</mi>   <mo>+</mo><mi>y</mi><mo>=</mo><mi>z</mi></mrow></math></formula>

您可以使用正则表达式而不是“&gt;”匹配以获得预期结果。这是最简单的例子:

c.expect("<formula.*formula>");

之后,您可以通过调用pexpect的匹配属性来访问匹配的字符串:

print c.match

你也可以尝试不同的正则表达式,因为我发布的那个是贪婪的,如果公式很大,它可能会妨碍你的执行时间。