2015-07-06 2 views
0

У меня есть этот кусок безвкусный кода, который предполагается напечатать что-то, что выглядит как на консоль:Почему эта часть кода, похоже, прерывается с перерывами?

goodput

CSI='\x1B[' 
reset=CSI+'m' 

for i in range(len(recs)): 
    print CSI+'36;40m' + str(i+1) + '\t\t', recTitles[i], CSI+'33;40m' + recReleaseYears[i] + reset 
    print CSI+'35;40m' + u'\u2588' + 'IMDb Rating:\t' + reset, recRatings[i], '('+recVotes[i]+' votes)' 
    print CSI+'34;40m' + u'\u2588' + 'Genre:\t\t' + reset, CSI+'36;1m' + recGenres[i] + reset 
    print CSI+'33;40m' + u'\u2588' + 'Cast:\t\t' + reset, recCast[i] 
    print CSI+'32;40m' + u'\u2588' + 'Director:\t' + reset, recDirectors[i] 
    print CSI+'36;40m' + u'\u2588' + 'Summary:\t' + reset, insertTabs(recPlots[i]) + reset 
    print CSI+'31;40m' + u'\u2588' + 'IMDb Link:\t' + reset, CSI+'34;1m' + recIMDbLinks[i] + '\n' + reset 

Однако, большую часть времени я получаю это: badput

Я не уверен, где проблема с моим кодом, потому что иногда он работает так, как ожидалось, и я получаю правильный вывод (что сводит меня с ума).

Я использую Enthought Canopy в качестве моей IDE.

+0

Вы загружали одно и то же изображение дважды? – Matt

+0

@Matt Нет, я этого не делал. Если вы посмотрите внимательно на второе изображение, вы увидите, что название фильма (Big Hero 6) не имеет черного фона, как на первом снимке. – Vinayak

+0

afaik вы можете печатать в цвете с помощью [curses] (https://docs.python.org/2/howto/curses.html). Я думаю, что это сделает код намного чище и понятнее/отлаживается. –

ответ

1

Проблема может возникнуть в эмуляторе терминала, сбросив цвета после символов табуляции (что будет ошибкой). Если вы измените вкладки так, чтобы были написаны только пробелы, это обойдется вокруг этой возможности.

Кстати, если ваш терминал был настроен на использовании жестких вкладок, то вы могли бы ожидать какое-либо другое неожиданное поведения (вкладки области будет пропускается и не окрашивается). Вот скриншот (скрипт для демонстрации): enter image description here

+0

Я не уверен в этом, потому что он всегда работает для других строк заголовка фильма после первого (т. Е. 'RecTitles [i]' где i> 0), что немного озадачивает. Вот скриншот расширенного вывода, который может помочь: http://i.imgur.com/VSMoO2O.png – Vinayak

+0

Предполагая, что ваши * данные * не содержат escape-последовательностей, я не вижу никакой другой функции для исследования, чем сам терминал , –

0

Я до сих пор не уверен, что проблема может быть, но с добавлением sys.stdout.flush() в начале цикла for, кажется, есть фиксированные вещи.

CSI='\x1B[' 
reset=CSI+'m' 
import sys 

for i in range(len(recs)): 
    sys.stdout.flush() 
    print CSI+'36;40m' + str(i+1) + '\t\t', recTitles[i], CSI+'33;40m' + recReleaseYears[i] + reset 
    print CSI+'35;40m' + u'\u2588' + 'IMDb Rating:\t' + reset, recRatings[i], '('+recVotes[i]+' votes)' 
    print CSI+'34;40m' + u'\u2588' + 'Genre:\t\t' + reset, CSI+'36;1m' + recGenres[i] + reset 
    print CSI+'33;40m' + u'\u2588' + 'Cast:\t\t' + reset, recCast[i] 
    print CSI+'32;40m' + u'\u2588' + 'Director:\t' + reset, recDirectors[i] 
    print CSI+'36;40m' + u'\u2588' + 'Summary:\t' + reset, insertTabs(recPlots[i]) + reset 
    print CSI+'31;40m' + u'\u2588' + 'IMDb Link:\t' + reset, CSI+'34;1m' + recIMDbLinks[i] + '\n' + reset 
+0

Он по-прежнему выглядит как ошибка в эмуляторе терминала, так как предполагается интерпретировать последовательности управления в том порядке, в котором они получены на терминале. Тестирование с помощью разных терминалов (без флеша) может быть информативным. –

Смежные вопросы