2013-10-09 39 views
-4

grabc是輸出顏色代碼和RGB值的工具。 當我使用它時,輸出看起來像這樣。如何用python中的readline函數獲取所有行?

$grabc 

'#000051' 

'0,0,81' 

我用這個程序抓取輸出

import os 

p=os.popen('grabc') 

s=p.readline() 

p.close() 

print "a="+s 


>>> "a=#000051" 

,但我想

>>> "a=#000051 

0,0,81" 

爲輸出 我應該怎麼辦搶第二行。

我正在使用python。我需要抓住整個輸出。

回答

0

一種方法是使用lines = p.readlines()代替。這將讀取不是一個,而是讀取輸出中的所有行,並將它們作爲字符串列表返回。但是,您可能不想使用os.popen模塊,而是使用新模塊subprocess的相應功能。

您可以使用"".join(lines)將字符串列表連接到單個字符串。由於這些行仍具有其原始行結束字符,因此可以使用""作爲分隔符。或者,您可以使用strip行尾字符並使用您自己的分隔符:"\n".join([l.strip() for l in lines])

此外,請注意,您不要將指定爲輸出到變量a,而只是按此方式打印。此外,取決於你想要對顏色值做什麼,最好將它們分開並將它們分配給不同的變量。


更新:在仔細檢查,似乎不是grabc所有輸出捕獲這種方式,既不符合subprocess甚至做grabc > some_file時。十六進制字符串被捕獲,但顏色元組不是。但是,您可以輕鬆地將一個值轉換爲另一個值,所以這應該不成問題。

h = "#a7bd7a" 
t = 167,189,122 
"#%02x%02x%02x" % t        # color tuple to hex string 
[int(h[i:i+2], 16) for i in range(1, len(h), 2)] # hex string to color tuple 
+0

對不起,我沒有看到您的評論。 'readlines'命令是有幫助的,但由於某種原因,grabc並沒有將readline中的所有值都取出來。在運行py文件後回答是這樣的 '0,0,193 readlines的值= ['#0000c1 \ n']'答案是['#0000c1 \ n']但我希望答案是'[[ '0,0,193''#0000c1 \ n']' – Sam

+0

我現在看到你的意思了。奇怪的是,不是'grabc'的所有輸出似乎都落在'p.readlines()'中......在使用'subprocess'模塊時也是如此。那麼,你仍然可以從十六進制再現數值... –

+0

感謝您的轉換代碼。 – Sam

相關問題