2012-07-13 120 views
2

我正在写一个小蟒蛇工具,以帮助推动我们的外壳-help文档搜索的网页,但我打了一个奇怪的块:壳牌文本Python字符串

output = subprocess.Popen([sys.argv[1], '--help'],stdout=subprocess.PIPE).communicate()[0] 
output = output.split('\n') 
print output[4] 
#NAME 
for l in output[4]: 
    print l 
#N 
#A 
# 
#A 
#M 
# 
#M 
#E 
# 
#E 

#or when written, n?na?am?me?e 

它的文档中做到这一点对于任何heading/subheading ,这使得它几乎不可用。

获取正确格式的任何提示?我在哪里搞砸了?

感谢

+1

你得到什么'print repr(output [4])'? – MRAB 2012-07-13 16:20:37

+0

用TERM = dumb运行它? – 2012-07-13 16:28:54

回答

4

该文档包含以古老的行式打印机方式完成的重载字符:打印每个字符,然后是退格键(\b,又名\x08),然后再次输入相同的字符。所以“NAME”变成"N\bNA\bAM\bME\bE"。如果你能说服程序而不是这样输出,那将是最好的;否则,你可以清理它类似于output = re.sub(r'\x08.', '', output)

+0

清除它。非常感谢。 – 2012-07-13 17:06:27

1

标记为粗体在终端打印字符的字符,后跟一个退格字符的一种常见方式,其次是角色本身再次(就像你会做它的机械打字机)。像xterm这样的终端仿真程序会检测这些序列并将它们变成粗体字符。如果stdout不是终端,程序就不应该打印这样的序列,但如果你的工具确实如此,你将不得不自己清理这些乱七八糟的东西。

+0

它有时也用于通过打印字符来执行下划线,然后通过退格键,然后是下划线字符。 – MRAB 2012-07-13 16:47:41