Рабочий код: PHP: import urllib2 proxy_handler = urllib2.ProxyHandler({'http': '174.142.104.57:3128'}) opener = urllib2.build_opener(proxy_handler) f = opener.open('http://2ip.ru/') Не рабочий: PHP: 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 на свой сайт, то сыпятся ошибки: Code: 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 Просто не могу понять почему не работает, страница работает, всё норм
Для того чтобы научится питону я попытался написать граббер картинок. То есть запускаешь скрипт, он просит ввести url страницы, ты его пишешь. И программа начинает скачивать оттуда все картинки и сохранять их в папку, которая называется именем сайта откуда скачиваешь. После этого я решил в качестве тренировки дополнить это GUI, для этого я заюзал GTK, и сразу же столкнулся с проблемой. Сам интерфейс выглядит просто, сверху окно для ввода URL, ниже кнопка, ниже окно куда выводится лог. После того как я ввожу url и жму на кнопку, форма зависает. И только после того как все картинки закачаются. Форма развисает, и лог в окне написан уже целиком. Насколько я понимаю, проблема в том, что при нажатии на кнопку у меня выполняется функция-обработчик которая все качает, и поэтому GTK неактивно. То-есть функция обработчик вызывает другие функции, и ждет пока они выполнятся. Я решил, что можно тогда из под обработчика функции вызывать не напрямую, а с передачей управления, например call. Однако , похожих команд для питона я не нашел. Каким образом можно решить эту проблему, чтобы интерфейс стал динамическим ? То-есть закачка производилась как бы в фоне. Например, скачалась картинка - добавилась строчка лога. И так до конца программы. P.S. Кстати, я тут придумал как решить это извращенным способом. При нажатии на кнопку будет менятся значение булевой переменной, также будет таймер, который каждые n миллисекунд вызывает функцию. Функция эта будет проверять: if значение_переменной_true: тормозим таймер, и начинаем выполнять все те функции, сбрасываем значение переменной else return Сильно ли это отразится на производительности?
При нажатии на кнопку создаешь и запускаешь поток, в котором и добавляешь элементы. Если не справишься, то днем, когда прийду напишу примерчик.
r0ot, а в чем проблема? Качаешь с: http://www.riverbankcomputing.com/software/pyqt/download версию для windows и устанавливаешь.
Напиши пожалуйста! thread.start_new_thread(test,(link,)) не работает. функция test не вызывается по какой-то причине. PHP: 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()?
Огромное тебе спасибо! После того как я вызвал этод метод, код заработал как часы, даже без исправлений! Большое тебе спасибо!
Подскажите, пожалуйста, где можно почитать про программирование для смартфонов на питоне? В частности интересует 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
На wxpython есть пару гуев - хз, никогда не инициализировал потоки - сразу и тупо запускал да и все. Задумался о переходе на pyQt. Не нравится лицензией, зато ВОЗМОЖНО избавлюсь от проблем gtk(Arch, Ubuntu). На Арче - вылетало приложение нафиг при любой попытке изменить фрейм, на Ubuntu реже, но слетает с сегфолтом (плюс в консоле по жизни ошибки). Вопрос на засыпку - как себя ведёт pyQt ?
Да нормально себя ведет, по крайней мере пока нареканий нету. Что именно тебя не устраивает в лицензии? )
login999, дык на wx их и не надо инициализировать - просто создаешь и запускаешь. насчет корявости гтк - не замечал =/
насчет qt - мне не нравится. какие-то QString вместо обычных строк и т.д. в общем кому что ближе.меня сейчас wx вполне устраивает.
Если чессн, то QT мне нравится тем, за что я ненавижу CURL - универсальностью. ИМХО это то, что можно выучить один раз, а потом использовать из разных языков, так как привязки есть под очень многие. Это немаловажный плюс ИМХО. В принципе wxwindows тоже много к чему привязан. Но хз. Я сейчас опять таки засматриваюсь в сторону QT из-за того, что раньше в нём ненавидел - "лишних" классов. Заебусь описывать сколько у меня было гемора для поддержки соксов в приложениях. Думаю достаточно будет сказать, что я этого так и не добился (CURL фтопку, Socksipy-кусок хавна)... QT же решает эту проблему. Мне уже стало наплевать на "Python-way" и использование QT исключительно как гуя и восторжение на тему "Ах как *****то, что у питона очень дохера сторонних модулей." На проверку оказывается что нормально и стабильно работают исключительно крупные фреймворки (либо к ним относящиеся), все остальные "сторонние" это говно, которого поискать еще нужно. Про стандартную библиотеку молчу - она всегда на высоте (хотя и некоторых моментов не хватает, но идеального не бывает) Вот как-то так. Прост QT это "вещь в себе"
login999, выговорился соглашусь насчет либ - найти что-то серьезное очень трудно. такое ощущение, что либы пишут криворукие дядьки) радуют только довольно популярные библитеки (ну стандартная библиотека - это естественно). из постоянных использую, наверное, только wxpython, django, pytils (удобно для сайтов на джанго когда нужно измеянть текст по падежам), может еще chardet (определяет кодировку строки). часто гораздо проще написать свое, чем разбираться с еле рабочим кодом сторонних либ.