Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3483 posts.

Python для новичков » передача строковых данных без перекодирования » Ноя. 15, 2009 13:18:31

вот так я замеряю размер самой строки без веса класса
# -*- coding: utf-8 -*-

import sys

def ssize(s):
if type(s) == unicode: return sys.getsizeof(s)-sys.getsizeof(u'')
else: return sys.getsizeof(s)-sys.getsizeof('')

print ssize('При вет') # 13
print ssize(u'При вет') # 14
когда я через сокет передаю данные в уникоде, т.е. 14 байт
socket.send(u'При вет') #14
и на другой стороне их принимаю, приходящая строка приходит с размером в 13 байт
socket.recv() #13

т.е. при отправке строка конвертируется в utf-8, как сделать что-б она не конвертировалась (отправить raw данные)?

Python для новичков » Преобразовать строку списка в список целых » Ноя. 15, 2009 09:10:12

входные данные: list_str =
Выходные: list_int =

Возможное решение:
list_int=map(lambda x: int(x),list_str[0].split(','))
Можно как-нить покороче и быстрее?
Заранее спасибо

Django » По instance field узнать к какой модели относится » Ноя. 14, 2009 16:10:32

Как по instanc-у field узнать к какой модели относится экземпляр?

Network » paramiko и output » Ноя. 13, 2009 16:14:42

Здравствуйте.

import paramiko
s = paramiko.SSHClient()
s.load_system_host_keys()
s.connect('test.host')
stdin, stdout, stderr = s.exec_command('kings of metal; uname -a')

Но меня не устраивает stdout, stderr.
как завернуть stderr в stdout в данном конкретном случае.
Мне по сути надо.
$ ssh test.hos “kings of metal; uname -a” >> /tmp/logfile 2>&1

Python для новичков » Помогите пожалуйста с кодировкой » Ноя. 13, 2009 14:15:34

Новичок.

Поискал по форуму и долго гуглил - но видимо из - за незнания сути проблемы решить не могу на данный момент следующую проблему:

Есть задача - приходит get запрос с параметром referal содержащим текст document.referrer - которому я предварительно делаю encodeURIComponent:

В итоге на сервере я имею в переменной ref например следующее:
http://yandex.ru/yandsearch?text=%D1%81%D0%B5%D0%BA%D1%81+%D1%88%D0%BE%D0%BF&lr=5&stpar2=%2Fh1%2Ftm34%2Fs3&stpar4=%2Fs3&stpar1=%2Fu0
или
ref: http://www.google.ru/search?q=%D1%81%D0%B5%D0%BA%D1%81+%D1%88%D0%BE%D0%BF&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox

Так, здесь вроде бы пока все хорошо, пояснять зачем я делаю encodeURIComponent перед отправкой думаю не следует - мне нужна строка целиком включая параметры идущие за спецсимволами вроде &.

Насколько я знаю по RFC - encodeURIComponent заэскейпил строку в UTF8, т.о тут строка содержащая заэскепенный текст скорее всего в кодировке utf8
Далее мне надо выделить фразу по которой был поиск, которая в google отвечает за это:
    def parse_search(url):
try:
parsed = urlparse.urlsplit(url)
network = parsed[1]
query = parsed[3]
except (AttributeError, IndexError):
return (None, None, None)
for engine, param in SEARCH_PARAMS.iteritems():
match = re.match(NETWORK_RE % engine, network)
if match and match.group(2):
term = cgi.parse_qs(query).get(param)
if term and term[0]:
term = ' '.join(term[0].split()).lower()
return (engine, network, term)
return (None, network, None)
-
После этого параметр term содержит фразу:
        logging.info("term: %s", term)
Выдает:
[I 091113 14:08:11 demo:333] term: ñ�ðµðºñ� ñˆð
мне не важно как в логах это выводится поэтому иду дальше,

Далее мне надо обратно передать эту строку в json
пытался так
term = simplejson.dumps(term)
'term': '"\\u00f1\\u0081\\u00f0\\u00b5\\u00f0\\u00ba\\u00f1\\u0081 \\u00f1\\u0088\\u00f0\\u00be\\u00f0\\u00bf"',
Пытался сделать по - разному - эффект - разного рода кракозяблы на стороне клиента. Использую jQuery.
При этом передавая строку в таком виде
'title': u'\u0421\u0435\u043a\u0441 \u0448\u043e\u043f'
на стороне клиента она отображается верно
——–
Попытка 2
Вопрос: как строку
 term = (urllib.unquote_plus(term))
вида
'term': u'\xf1\x81\xf0\xb5\xf0\xba\xf1\x81 \xf1\x88\xf0\xbe\xf0\xbf'
перевести в нечто подобное:
 u'\u0421\u0435\u043a\u0441 \u0448\u043e\u043f'
Заранее благодарю сообщество за возможную помощь или совет по делу!

читал форум здесь
http://python.su/forum/viewtopic.php?id=5370
http://python.su/forum/viewtopic.php?id=3436
не помогло пока.

Web » apache + wsgi, общие ресурсы, возможно? » Ноя. 12, 2009 16:50:09

при запуске wsgi приложения запоминаю время, а при генерации страницы вывожу это время.
в результате, при частом обновлении страницы, выдается 3 разных времени. ( т.е. запущенно 3 копии проложений )

думаю апач запускает несколько копий если пришел запрос от клиента когда первая копия ещё не отработала.

как сделать что-б в скрипте можно было использовать общие ресурсы?

код:
# coding: utf-8

import time

counter = 0
start = time.ctime()

def application(environ, start_response):
global counter,start
counter += 1

status = '200 OK'
output = 'Start time: %s<br/>\nCounter: %d' % (start,counter)

response_headers = [('Content-type', 'text/html; charset=utf-8'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)

return [output]

GUI » Класс стандартного окна » Ноя. 12, 2009 00:14:24

Есть мысль сделать класс окна, и на основе его создавать объекты по мере необходимости.
Окно должно иметь панель инструментов, панель статистики и между ними табличка.
Панели инструментов должны иметь постоянную высоту, а табличка должна меняться по высоте , если мы начинаем увеличивать окно.
Вот я сварганил, такой класс, но что-то не того … не получается.
Помогите пока, что начинающему питонному программеру )))

Вот сам текст проги:
# -*- coding: cp1251 -*-
from Tkinter import *
import sys
import time

from TableList import *


class Aplication(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
# Пакуем окошко
self.pack()
#Создаем виджеты
self.createWidgets()

def createWidgets(self):
#Узнаем размеры экрана и задаем минимальные и максимальные размеры окна, тут у нас всё максимально
self.master.maxsize(self.winfo_screenwidth(),self.winfo_screenheight())
self.master.minsize(self.winfo_screenwidth(),self.winfo_screenheight())
self.master.title = "Справочник"
#Создаем рамку не всё окно, чтобы можно было применять различные менеджеры
self.mframe = Frame(self)
self.mframe.width = self.winfo_screenwidth()
self.mframe.height = self.winfo_screenheight()
#Растягиваем рамку на все окно
self.mframe.pack(expand = YES)
#Создаем панель инструментов
self.toolbar = Frame(self.mframe)
self.toolbar["borderwidth"]=2
self.toolbar["relief"]=RAISED

# self.toolbar.pack(fill=X)
#Нихай занимает 10% по высоте
self.toolbar.place(relx= 0.1, rely=1)
#Место для таблички
self.work = Frame(self.mframe)
self.work["borderwidth"]=2
self.work["relief"]=RAISED
# self.work.pack(fill = BOTH)
#нихай занимает 80% окна
self.work.place(relx=0.8, rely=1)
# панель статуса
self.statusbar = Frame(self.mframe)
self.statusbar["borderwidth"]=2
self.statusbar["relief"]=RAISED
# self.statusbar.pack(fill = X)
#Нихай занимает 10%
self.statusbar.place(relx=0.1,rely=1)

#Ну тут в панель инструментов кидаем всякие кнопки

self.butAdd = Button(self.toolbar,text = "Добавить")
self.butAddPap = Button(self.toolbar,text = "Группа")
self.butDel = Button(self.toolbar,text = "Удалить")
self.butSelFiltr = Button(self.toolbar,text = "Фильтр")
self.butDelFiltr = Button(self.toolbar,text = "Удалить фильтр")
self.butAdd.pack(side=LEFT)
self.butAddPap.pack(side=LEFT)
self.butDel.pack(side=LEFT)
self.butSelFiltr.pack(side=LEFT)
self.butDelFiltr.pack(side=LEFT)


# +++++++++++++++++++++++++++Таблица+++++++++++++++++++++++++++++++++++++++++
tl = TableList(self.work, stretch='all', showarrow=True, columns = (5, 'Код', 0, "Название", "left", 0,"Примечание", 'right'),
)
tl.pack(fill="both")

tl.columnconfigure(0, showlinenumbers=True,)

tl.columnconfigure(1, sortmode='ascii', sortcommand='sortbycolumn')

tl.columnconfigure(2, sortmode='ascii', sortcommand='sortbycolumn')
tl.curselection()
#Ну и статус чтоб не был пустым
self.message = Label(self.statusbar, text='Привет, библиотека Tk!')
self.fortime = Label(self.statusbar, text= time.time() )
self.message.pack(side =LEFT)
self.fortime.pack(side = RIGHT )
#Усё пр херим
def die(self):
sys.exit(0)
#Ну тут шоб можно было опробывать
if __name__ == "__main__" :
app = Aplication()
app.mainloop()
И ни фига, окошко рисуется а в нем шиш ((((
С Pack() все работало, но не знаю как добиться, чтобы все растягивалось при изменении размеров окна

Python для Java » Вопрос » Ноя. 10, 2009 18:21:59

Извините, если туплю.

Google App Engine поддерживает Jython? Если да, то какие тонкости, ведь, как я понял, в версии 2.5 есть проблемы со статической компиляцией в Java-классы?

Флейм » Ведущий Python программист (game development) 80 000 руб » Ноя. 10, 2009 17:11:39

Для работы над серверной частью ММО игры с flash клиентом, требуется ведущий программист.

Обязанности:

Построение архитектуры серверной части
Проектирование базы данных
Разработка системных служб и сетевых сервисов
Разработка игровой механики
Разработка игрового инструментария

Требования

Отличное знание Python
Отличное знание реляционных баз данных, опыт работы с MySQL и/или PostgreSQL
Хорошая алгоритмическая подготовка

Желательно

Опыт работы с Twisted
Опыт участия в игровых проектах (с client/server архитектурой)
Опыт написания сетевых протоколов
Опыт оптимизации приложений
Опыт программирования на C/C++
Знание сетевых технологий и протоколов
Законченное высшее техническое образование

Условия

Полный рабочий день, м.Красные ворота
Гибкий график работы
Заработная плата от 80000р по результатам собеседования (чистая)
Оформление по ТК РФ
Профессиональная команда разработчиков

Панько Александр
god@panki.ru
+7 926 479-2443

Инструментальные средства разработки » Camelot (не запускается приложение) » Ноя. 9, 2009 14:53:43

Привет всем!

Есть некоторое небольшое приложение, работающее с базой SQLite, которое использует Camelot.
Так вот, на одном ноутбуке установил Camelot с помощью easy_install (sudo easy_install camelot). Соответственно, установились необходимые пакеты (SQLAlchemy, Elixir, pyExcelerator, Jinja). После этого приложение успешно запустилось.
Понадобилось запустить это приложение на другом компьютере, тоже ноутбуке с такой же операционкой Debian Lenny с kde4.3.2. Но не тут-то было. Команда “sudo easy_install camelot” прошла также успешно, все установилось, но при запуске приложения запускается оболочка Camelot, а база данных в ней не отображается. При этом в консоли вылетает такая ошибка:

$ python main.py
QObject: Cannot create children for a parent that is in a different thread.
(Parent is SignalSlotModelThread(0xa48e368), parent's thread is QThread(0x9e258b8), current thread is SignalSlotModelThread(0xa48e368)

И не пойму, в чем дело. Кто может подсказать, как это устранить? Может, что не установлено?


P.S. кажется, не совсем в том разделе создал тему. Модераторы, перенесите, пожалуйста!

Python для новичков » Общение с субпроцессом » Ноя. 8, 2009 11:35:05

Есть скрипт, он запускает другие скрипты, и в цикле передает им данные, они читают, возвращают другие данные, главный скрипт читает, отсылает им следующие данные и т.д.
попытался это написать через subprocess communicate(), оказалось что он ждет пока дочерний скрипт завершился. нарыл это:
http://code.activestate.com/recipes/440554/
Помогло в чем то.
Теперь материнский скрипт посылает данные дочерним, но читает их данные только первый раз. Потом, сколько не читай возвращает пустую строку (читаю через recv_some(process, 1, True, 1000)
из приведенного выше модуля). А дочерние скрипты точно отправляют, в stderr вывел
Что я делаю не так?

Инструментальные средства разработки » ecb под windows » Ноя. 6, 2009 19:33:08

Занесла судьба на некоторое время под windows, заодно решил и еще одну попытку с vim по emacs перебраться. Поставил ECB, теперь вопрос - как сделать чтобы он таги показывал для открытого файла? Он же это через etags делает? Так в путях etags есть.

Network » Проверка доступности хоста перед отправкой » Ноя. 5, 2009 15:20:51

Собственно нужна функция содержащая информацию о том как закончилось действие только что выполненное. случай следующий:
CLIENTHOST = '192.168.1.1'
CLIENTPORT = 33333
SERVERHOST = '192.1681.2'
SERVERPORT = 33335
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((CLIENTHOST, CLIENTPORT))

sock.sendto(str(chr(100)),(SERVERHOST,SERVERPORT))
Нужно перед отправкой проверить есть ли соединение между сервером и клиентом, то есть слушает ли порт сервер. Именно в случае с удп датаграммами.
в перле нашел что то похожее - функция define.

Django » django + YAWS - стоит ли? » Окт. 27, 2009 23:43:37

Вот начал изучать любопытный язык erlang и нашел вот такой-вот написанный на этом языке веб сервер YAWS: http://yaws.hyber.org/.
Использовал ли кто-нибудь джангу под этим сервером (они заявляют 80000 конкурирующих соединений и высокое быстродействие)?
Поделитесь впечатлениями.

Web » wsgi, TurboGears и куки » Окт. 27, 2009 12:45:53

Бьюсь целый день, не могу понять в чем суть: apache+mod_wsgi+TurboGears. В коде TurboGears простой алгоритм: если в запросе есть кука tg-visit взять ее иначе генерировать новую. Удаляю в броузере куки для сайта, в запросе их точно нет, прилетает старая кука. Ничего не понимаю. Кеширование? Где?

Python для новичков » Как автоматизировать обработку исключений? » Окт. 26, 2009 14:15:27

Если во время чтения, например, отвалится sshfs, должна произойти IOError в цикле. Как можно корректно обработать такое исключение, и вынести в функцию, чтобы не повторять такой код?

Я сделал себе функцию-обёртку, которая обрабатывает IOError при открытии файла, чтобы выводить читабельное сообщение об ошибке. Но файлы я считываю по-разному и не могу вынести это в функцию (в некоторых случаях весь файл считать невозможно, это может быть не нужно, либо файл большой. В других случаях надо пройти весь файл).
def safe_open(*args):
try:
return open(*args)
except IOError:
sys.exit('Error when opening file \'{0}\'. Error #{1[0]}: {1[1]}'.format(\
args[0], sys.exc_info()[1].args))
...

with safe_open(myfile, 'r') as f:
for i in f:
print i

with safe_open(anotherfile, 'r') as f:
try:
conf = ''.join(f).format(**args)
except KeyError:
quit('\nOops, your template \'{0}\' has placeholders for parameters\nthat were not supplied in the command line: - {1}\n\nCan\'t proceed. Ending. Nothing has been changed yet.'.format(args['host_template'], '\n - '.join(sys.exc_info()[1].args)), 1)

Базы данных » SQLAlchemy, many-to-many, cascade » Окт. 22, 2009 15:34:46

Прошу помощи.
Берем модель many-to-many, классический вариант.
articles=sa.Table('articles',meta.metadata,
sa.Column('id',sa.types.Integer,primary_key=True,autoincrement=True,nullable=False),
sa.Column('name',sa.types.String(255),default=u'',nullable=False),
)
news=sa.Table('news',meta.metadata,
sa.Column('id',sa.types.Integer, primary_key=True, autoincrement=True,nullable=False),
sa.Column('name',sa.types.String(255),default=u'',nullable=False),
)
news_tag=sa.Table('news_tag',meta.metadata,
sa.Column('new_id',sa.types.Integer,sa.ForeignKey('news.id'),nullable=False,default=0),
sa.Column('article_id',sa.types.Integer,sa.ForeignKey('articles.id'),nullable=False,default=0),
)
class Articles(object):
def __repr__(self):
return self.name
class News(object):
def __repr__(self):
return self.name
orm.mapper(Articles,articles)
orm.mapper(
News,news,
properties={'articles':orm.relation(Articles,secondary=news_tag,backref=orm.backref('news'))}
)
Как правильно сделать каскадное удаление, да так, чтобы удалились только те потомки, у которых больше нет родителей?
Читал, что каскады вроде-бы в таких раскладах работают через пень-колоду. Так у меня и было. Может быть, есть-таки рецепт?

GUI » wxHtmlWindow - размер по содержимому » Окт. 21, 2009 23:26:11

Как установить размер wxHtmlWindow по размеру содержимого?
Может есть какая-то функция как в PIL, размер текста определенным шрифтом посчитать..
ничего подобного в хелпе не нашел, подскажите

Network » Пара вопросов о mechanize » Окт. 20, 2009 15:28:16

Делаю скраппер на mechanize и в процессе возникли некоторые вопросы:
1. Каким образом в mechanize установить таймаут на обработку запроса? В Browser.open, есть параметр timeout, но так по общему впечатлению от его использования нет никакого толка, т.е и запрос “задумался” и время таймаута вышло, а реакции никакой. Может я его не правильно готовлю? :)

2. Компьютер с подключением к инету находится за проксей. Программа для своей работы иногда пользуется другими проксями. Можно ли каким-нибудь образом “подружить” эту прокси с другими http, sock proxy на уровне python'а. Когда прога запускается с компьютера, который напрямую подключен к инету, все отлично.

GUI » проблемма с PyLab (Matplotlib) » Окт. 19, 2009 20:18:17

Пишу программу которая по пунктам
1. опрашивает плату АЦП(через dll) - записывает в файл(предполагается испрользовать в автоматическом режиме)
2. Читает из полученного файла инфу, преобразует её и рисует

проблема в том, что по частям весь код работает, если же поставить две части программы последовательно, то окошки pyLab выводятся, только при наличаии строчки, которая мне совсем не нужна:

u“закрываем драйвер платы АЦП”
a.close()
#конец кода от первой части

#странная строчка


#начало кода второй части
pylab.figure()

что код работает при наличии этой строчки выяснилось случайно(при копировании примера остальной код был подчищен)
такое поведение только matplotlib 0.98.5, если же поставить 0.99.1 - вываливается при попытке записать по нулевому адресу 0x0000..
код ошибки при использовании matplotlib 0.98.5 и отсутсвии строчки:

Traceback (most recent call last):
File “C:\py.tests\PISO-813\src\main.py”, line 292, in <module>
pylab.figure()
File “C:\Python25\lib\site-packages\matplotlib\pyplot.py”, line 251, in figure
**kwargs)
File “C:\Python25\lib\site-packages\matplotlib\backends\backend_tkagg.py”, line 92, in new_figure_manager
figManager = FigureManagerTkAgg(canvas, num, window)
File “C:\Python25\lib\site-packages\matplotlib\backends\backend_tkagg.py”, line 351, in __init__
self.toolbar = NavigationToolbar2TkAgg( canvas, self.window )
File “C:\Python25\lib\site-packages\matplotlib\backends\backend_tkagg.py”, line 609, in __init__
NavigationToolbar2.__init__(self, canvas)
File “C:\Python25\lib\site-packages\matplotlib\backend_bases.py”, line 1742, in __init__
self._init_toolbar()
File “C:\Python25\lib\site-packages\matplotlib\backends\backend_tkagg.py”, line 653, in _init_toolbar
borderwidth=2)
File “C:\Python25\lib\lib-tk\Tkinter.py”, line 2454, in __init__
Widget.__init__(self, master, ‘frame’, cnf, {}, extra)
File “C:\Python25\lib\lib-tk\Tkinter.py”, line 1942, in __init__
(widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: bad screen distance “-1.#IND”