2012-07-13 119 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