2013-02-20 65 views
4

我有一個奇怪的問題,我不能把手指放在上面。我使用了一個程序(並不時有所貢獻),該程序使控制檯輸出着色。一切工作很好,直到我重新安裝Windows。現在我無法獲得彩色輸出。打印彩色輸出 - 從控制檯而不是從腳本工作

這是用於着色的script

我已經設法將問題縮小到或多或少的簡單情況,但我不知道什麼是錯的。

這是控制檯提示符下按預期工作(字符串test紅色印):

Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.path.insert(0, r'c:\bin\SV\tea\src') 
>>> from tea.console.color import cprint, Color 
>>> cprint('test\n', Color.red) 
test 
>>> 

但是當我運行下面的腳本與相同版本的Python我得到的輸出test但不是在紅色(有沒有顏色,只是默認的控制檯顏色):

import sys 
sys.path.insert(0, r'c:\bin\SV\tea\src') 

from tea.console.color import cprint, Color 
cprint('test\n', Color.red) 
  • 之前,我重新安裝了系統相同的設置工作。
  • 我已經檢查過,交互模式和腳本中的環境變量是相同的。
  • 我已經在標準的Windows命令提示符和控制檯中試過這個,我通常使用的程序是 。
  • 有問題的操作系統是Windows 8,在重新安裝之前,這也在Windows 8上使用。
  • 相同的代碼具有相同的安裝程序在工作的計算機(Windows 7)工作。
  • 我安裝了Python 2.7和Python 3.3(正如我以前所做的那樣)。我試圖運行腳本 與直接調用python解釋器(c:\Python27\python.exe)或與py -2, 但它沒有幫助。
  • IPython和mercurial按照它應該的顏色輸出。

任何想法我可以嘗試使這項工作?

編輯

也許並不清楚,但劇本我用上色輸出有問題的鏈接中給出。在這裏它再次: https://bitbucket.org/alefnula/tea/src/dc14009a19d66f92463549332a321b29c71d47b8/src/tea/console/color.py?at=default

+0

你可以分享代碼到'tea.console.color'嗎?例如,是否在管道環境中使用終端檢測來禁用顏色? – 2013-02-23 16:43:58

+0

有問題的tea.console.color的鏈接。我將編輯問題以使其更清楚。 – 2013-02-23 17:20:56

+0

查看[utils模塊源代碼](https://bitbucket.org/alefnula/tea/src/dc14009a19d6/src/tea/system/__init__.py?at=default)我想知道*爲什麼*該項目不'使用['platform'](http://docs.python.org/2/library/platform.html)模塊?平臺檢測完全有可能在某處出錯。 – 2013-02-23 17:25:34

回答

4

我發現問題和解決方案。

我認爲問題在於x64 ctypes模塊中的錯誤。我安裝了Python 2.7 x64和與該版本以下行(從腳本,我有問題的鏈接):與描述The handle is invalid

ctypes.windll.kernel32.SetConsoleTextAttribute(std_out_handle, code) 

返回錯誤代碼6。經過一番調查,我推斷出這個問題可能是python的x64版本,所以我安裝了32位版本,並且所有內容都按預期工作。

由於這解決了我的問題,而且我沒有時間進行更深入的分析,所以我會將其留在此處,只是想給出某種問題的解決方案。