Посты с тегом python
smacker 03.12.2009 17:11

PythonИнструментальные среды разработки для Python

Писать, как известно, можно где угодно и как угодно. Вплоть до скриптов на листке бумаги, а интерпретатор держать в голове. Всё зависит от личных предпочтений того или иного человека. Я расскажу о тех средах в которых хоть немного успел поработать. И начну с самого просто:


Полностью.
+ 10 -
30
bobry 29.10.2009 05:50

Pythonrlcompleter: дополнение на месте


Все кто хоть чуть-чуть знаком с python, знают как удобно бывает, время от времени, проверить работоспособность чего-нибудь в интерпритаторе. Лично у меня постоянно вылетают из головы названия методов/функций итп, посему частенько приходится писать чтонибудь а ля:
1
2
3
>>> import sys
>>> dir(sys)
<'__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'py3kwarning', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions'>


И все еще достаточно терпимо, когда список, возвращаемый dir сравнительно небольшой, как выше, но когда он в два, а то и три, раза больше - найти нужный пункт становится проблемматично. На помощь, в таком случае, приходит модуль rlcompleter. Чтобы проиллюстрировать, как это работает приведу пример из официальной документации:
1
2
3
4
5
6
7
&gt;&gt;&gt; import rlcompleter
&gt;&gt;&gt; import readline
&gt;&gt;&gt; readline.parse_and_bind("tab: complete")
&gt;&gt;&gt; readline. 
readline.__doc__          readline.get_line_buffer(  readline.read_init_file(
readline.__file__         readline.insert_text(      readline.set_completer(
readline.__name__         readline.parse_and_bind(


К слову, упомянутый выше модуль readline помимо дополнения, имеет еще одну полезную функцию - восстановление истории предыдущих сеансов работы с интерпритатором, в виде функций read_history_file и write_history_file.

Чтобы заставить интерпритатор автоматически загружать все эти вкусности делаем следующее:
создаем в домашнем каталоге файл .pystartup (вообще говоря, выбор местоположения и имени этого файла не критичен, так что файл может находиться где угодно и назывться как вам хочется)
добавляем в этот файл строчки:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# -*- coding: utf-8 -*-

# Если Вы планируете использовать переменные окружения или `~`,
# то нужно обернуть строку в os.path.expandvars или os.path.expanduser
#
# Замечание: в случае, если значение перменной - пустая строка, readline
# будет использовать стандартный путь: ~/.history
HISTORY_FILE = 'path/to/history/file'
# Количество элементов истории, которые будут сохраняться, или -1, если
# Вы хотите сохранять все элементы.
HISTORY_FILE_SIZE = 20


import atexit
import rlcompleter
import readline


def validate_file(history_file):
    "Function checks if the filename for the history file is valid."
    import os.path
    return not history_file or os.path.exists(history_file)


def save_history_file():
    "Function saves input history to HISTORY_FILE."
    import readline
    readline.write_history_file(HISTORY_FILE)


# Инициализируем дополнение по 
readline.parse_and_bind("tab: complete")
# Устанавливаем размер файла истории
readline.set_history_length(HISTORY_FILE_SIZE)
# Загружаем историю из файла
if validate_file(HISTORY_FILE):
    readline.read_history_file(HISTORY_FILE)

# Регистрируем функцию для сохранения истории, при выходе из интерпритатора
atexit.register(save_history_file)

# Удаляем импортированные модули
del atexit
del rlcompleter
del readline

устанавливаем в ~/.bashrc (.zshrc, .cshrc w\e) значение переменной PYTHONSTARTUP
1
export PYTHONSTARTUP ~/.pystartup

наслаждаемся готовым результатом :)
ЗЫ: хочется заранее разочаровать пользователей Windows, модуль , используемый в этом решении, имеет только Unix реализацию.
Полностью.
+ 9 -
8
kakty3 26.10.2009 21:18

PythonPython и плейлист Audacious

Недавно, на досуге, то ли от нечего делать, то ли от лени постоянно Драг'н'Дропать файлы в плейлист Audacious решил написать простенький скриптик на питоне для добавления файлов в плейлист и добавить его в контекстное меню Наутилуса. И решил, почему бы не поделиться им с общественностью?
Полностью.
+ 11 -
11
ZogG 21.09.2009 00:29

welinuxБот на конференции

Вообщем настраиваю бота для конференции, пока что он в тестовой версии, так как надо всё перевести, и дописать пару скриптов. В данный момент я и cyrus ведем проверки и пытаемся разобраться на канале sleekbot@conference.jabber.ru (кто хочет помочь - добро пожаловать).

Ну первым скриптом я решил сделать гуглопоиск, в данный момент всего лишь выдает инфу первой ссылки ( надо щас еще сделать, чтоб красиво выдавал описание, ссылку и имя страницы), в дальнейшем будет аргумент - номер результата поиска.



К чему это я? Просто решил немного изучить питон и сделать что-то полезное ( второе помогает первому, так как лентяй ), потому здесь прошу написать идеи на скрипты, ну и тех кто желает помочь, милости просим на канал указанный выше.
+ 4 -
8
_bvz_ 09.09.2009 16:43

Tips & tricksRemote debug для Python.

Не найти, наверное, такого программиста, который не сталкивался с задачей исправления своего/чужого кода.

Во многих случаях на помощь приходят всякого рода IDE со встроенными средствами поиска и справления ошибок. Вслучае отсутствия таковых, можно воспользоваться специализированными средствами (например pdb для python). Но что делать, если очень хочется подебажить удалённо?
Полностью.
+ 3 -
0
nvbn 18.08.2009 18:25

Есть вопрос!Gnome applet на python и ориентация в пространстве

Потребовалось написать апплет для гнома, который парсит страничку провайдера. Воспользовавшись инструкцией с хабра я его сделал, но текст располагается не посередине, а сверху. Помогите сделать его по центру. Времени вникать в pygtk нету, поэтому и спрашиваю.

/home/nvbn/weather/main.py:
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/env python
 
# coding=utf-8
 
import sys, os, gtk, gtk.gdk, pygtk, gnomeapplet, gnome
 
 
 
pygtk.require(&#39;2.0&#39;)
 
 
 
class MyApplet (gnomeapplet.Applet):
 
 
 
    def __init__ (self, applet, iid):
 
 
 
        self.applet = applet
 
        self.applet.set_name(&#39;MyApplet&#39;)
 
        self.hbox = gtk.HBox()
 
        self.applet.add(self.hbox)
 
        self.event = gtk.EventBox()
 
        self.hbox.add(self.event)
 
        self.info = gtk.Label()
 
	self.event.add(self.info) # Чтобы объект мог реагировать на различные события, его нужно поместить в Event Box
 
        self.event.set_tooltip_text(&#39;Погода в центре Иркутска&#39;)
 
        self.__init_popupmenu()
 
        self.applet.connect(&#39;destroy&#39;, self.callback_destroy)
 
        self.applet.show_all() # Показываем все это на панели
 
        self.info.set_text(self.get_info())
 
 
 
    def __init_popupmenu (self):
 
 
 
        self.applet.setup_menu(&#39;&#39;&#39;
 
            &lt;popup name=&#39;button3&#39;&gt;
 
                &lt;menuitem name=&#39;About Item&#39; verb=&#39;About&#39; stockid=&#39;gtk-about&#39;/&gt;
 
            &lt;/popup&gt;&#39;&#39;&#39;, <
 
                          (&#39;About&#39;, self.callback_about)
 
                         >, None)
 
 
 
    def get_info (self):
 
	return os.popen(&#34;echo `wget -qO - http://domseti.ru/termometr.php|iconv -f Windows-1251 -t UTF-8 -|grep Иркутcк\ Центр|awk &#39;{ print $5 }&#39;|sed &#39;s/&lt;b&gt;//g&#39;` °C&#34;).read() 
 
 
 
    def callback_about (self, event, data=None):
 
        &#39;&#39;&#39;Показываем стандартное окошко среды GNOME&#39;&#39;&#39;
 
        os.system(&#39;gnome-about&#39;)
 
 
 
    def callback_destroy (self, applet):
 
        &#39;&#39;&#39;Уничтожаем объект&#39;&#39;&#39;
 
        del self.applet
 
def applet_factory (applet, iid):
 
 
 
    MyApplet(applet, iid)
 
    return True
 
 
 
def main (args):
 
 
 
 
 
        gnomeapplet.bonobo_factory(&#39;OAFIID:GNOME_MyApplet_Factory&#39;,
 
                                   MyApplet.__gtype__,
 
                                   &#39;My Applet&#39;,
 
                                   &#39;1.0&#39;,
 
                                   applet_factory)
 
 
 
 
 
 
 
if __name__ == &#39;__main__&#39;:
 
    main(sys.argv)


/usr/lib/bonobo/servers/gnomeMyAppletFactory.server:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
&lt;oaf_info&gt;
 
    &lt;oaf_server iid=&#39;OAFIID:GNOME_MyApplet_Factory&#39; type=&#39;exe&#39; location=&#39;/home/nvbn/weather/main.py&#39;&gt;
 
        &lt;oaf_attribute name=&#39;repo_ids&#39; type=&#39;stringv&#39;&gt;
 
            &lt;item value=&#39;IDL:Bonobo/GenericFactory:1.0&#39; /&gt;
 
            &lt;item value=&#39;IDL:Bonobo/Unknown:1.0&#39; /&gt;
 
        &lt;/oaf_attribute&gt;
 
        &lt;oaf_attribute name=&#39;name&#39; type=&#39;string&#39; value=&#39;My Applet&#39; /&gt;
 
        &lt;oaf_attribute name=&#39;description&#39; type=&#39;string&#39; value=&#39;Show your karma and ratio&#39; /&gt; 
 
    &lt;/oaf_server&gt;
 
 
 
    &lt;oaf_server iid=&#39;OAFIID:GNOME_MyApplet&#39; type=&#39;factory&#39; location=&#39;OAFIID:GNOME_MyApplet_Factory&#39;&gt;
 
        &lt;oaf_attribute name=&#39;repo_ids&#39; type=&#39;stringv&#39;&gt;
 
            &lt;item value=&#39;IDL:GNOME/Vertigo/PanelAppletShell:1.0&#39; /&gt;
 
            &lt;item value=&#39;IDL:Bonobo/Control:1.0&#39; /&gt;
 
            &lt;item value=&#39;IDL:Bonobo/Unknown:1.0&#39; /&gt;
 
        &lt;/oaf_attribute&gt;
 
        &lt;oaf_attribute name=&#39;name&#39; type=&#39;string&#39; value=&#39;altanet weather applet&#39; /&gt;
 
        &lt;oaf_attribute name=&#39;description&#39; type=&#39;string&#39; value=&#39;Show weather&#39; /&gt;
 
        &lt;oaf_attribute name=&#39;panel:category&#39; type=&#39;string&#39; value=&#39;Utility&#39; /&gt;
 
        &lt;oaf_attribute name=&#39;panel:icon&#39; type=&#39;string&#39; value=&#39;weather-storm&#39; /&gt;
 
    &lt;/oaf_server&gt;
 
    &lt;/oaf_info&gt;


Вставка на bash используется, так как была написана за долго до этого.
Полностью.
+ 0 -
6
evgenyl 13.08.2009 16:04

PythonИщем прокси

Ещё один пример на питоне, скрипт ищет рабочие прокси и тестирует их на скорость.

Исходный код

Полностью.
+ 13 -
13
evgenyl 13.08.2009 11:40

PythonGoogle переводчик

Захотелось поддержать блог о питоне, накидал простой пример переводчика используя сервис google translate.



Все очень просто, в трее висит иконка, по нажатию на нее появляется окно, пишем в нем текст на английском, enter и в нем же видим перевод на русском языке.



Жмем еще раз по иконке окно исчезает, правая кнопка по иконке выход.



Это всего лиш пример того что можно делать на питоне.



Исходный код

Полностью.
+ 22 -
21
cyrus 06.08.2009 23:30

Я рекомендуюMusca &amp; Qtile

+ 11 -
18
Mumrik 01.08.2009 11:33

How-to`sЗависание Rapache в Ubuntu 9.04

Во времена Windows я пользовался такой удобной штукой, как "Джентльменский набор веб-разработчика", а при переходе на Ubuntu оказалось, что в мире линукса всё ещё проще.



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



Но оказывается, исправить эту проблему гораздо проще, чем я думал.
Полностью.
+ 9 -
14
1 2 3 4 5 6 7 8 9 10