Я писал небольшую программу, которая берет список и генерирует из него меню в проклятиях (прямо, стандартная библиотека или что-то еще, батареи включали в себя проклятия Python), когда я заметил странную проблему (если хотите,комментируемая копия всей программы находится ниже).Проще говоря, при принятии результатов сгенерированного списка os.listdir
curses вылетает с addstr
ERR, НО, если я передаю ему жестко закодированный список, он работает нормально.Это, конечно, не имеет никакого смысла, верно?Список - это список, это список, а список под любым другим именем все равно должен быть списком, верно?
Чтобы сделать вещи еще более сложными, я отправил код своему другу, который работает в основном в python2.6 (мой изначально был написан для работы в python3.1).Он раскомментировал вызов broken_input()
(который передает программе генерируемую os.listdir
информацию) и сказал, что он работал нормально для него.У меня установлены и Python 2.6, и 3.1, поэтому я изменил свой shebang, чтобы программа работала в 2.6, и (с broken_input()
без комментариев) для меня она все еще выдает addstr
ERR (пока что)отлично работает с жестко закодированным вводом ... что, кстати, кстати, совершенно бесполезно, кроме доказательства концепции).
Таким образом, мой вопрос таков: что-то не работает в моей установке на python (я использую Ubuntu lucid с установленными python2.6.5 и 3.1), и, если да, то как мне это исправить, чтобы яможно получить проклятия, чтобы правильно выполнить этот код.И, если это не моя установка на python, как я могу получить ту же функциональность из проклятий (то есть: нарисовать меню из списка, содержащего произвольное количество элементов, пронумеровав их так, чтобы пользователь мог сделать выбор на основе номера элемента).
#!/usr/bin/env python3.1
"""curses_mp3eater.py: a curses-based implementation of my mp3eater program;
diplays the contents of cwd, allows user to make a selection. But I'm having
problems getting it to iterate over a list.
v0.1 03.14.11
by skookie sprite
address@gmail.com
"""
import curses, curses.wrapper, os, sys
def working_input():
"""the following is demo code to demonstrate my problem... main will accept the following,
but won't accept the product of a directorylist for reasons that I can't figure out."""
dircontents=['this','is','a','list','','and','it','will','iterate','fine','in','the','(main) function.']
return dircontents
def broken_input():
"""this is the code that I NEED to have work... but for reasons beyond me will not iterate in
the main function. It's a simple list of the contents of the CWD."""
cwd=os.getcwd()
dircontents=[]
for item in os.listdir(cwd):
dircontents += [item]
return dircontents
def main(stdscr):
"""This is the program. Designed to take a list of stuff and display it. If I can solve
that hurdle, I'll add selection mechanisms, and break it across screens - amongst other
things. But, currently, it can only accept the demo code. Uncomment one or the other to
see what I mean."""
#broken_input returns an addstr() ERR, but I don't see the difference between working_input
#and broken_input as they are both just lists.
#working_input() is demo code that illustrates my problem
stuffin=working_input()
#stuffin=broken_input()
#the rest of this stuff works. The problem is with the input. Why?
linenumber=int()
linenumber=6
itemnumber=int()
itemnumber=1
stdscr.clear()
stdscr.border(0)
for item in stuffin:
stdscr.addstr(linenumber, 10, '%s - %s' % (itemnumber, item), curses.A_NORMAL)
linenumber += 1
itemnumber += 1
curses.doupdate()
stdscr.getch()
if __name__ == '__main__':
curses.wrapper(main)