Учимся ездить на Питоне, опыт освоения языка Python с нуля |
Поделиться |
Здравствуйте, гость ( Вход | Регистрация )
Учимся ездить на Питоне, опыт освоения языка Python с нуля |
Поделиться |
25.8.2010, 19:28
Сообщение
#1
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
Несколько дней назад начал пробовать связку Python + Tkinter. С чего началось - сказано здесь . Какие первые выводы?
Прежде всего, убедился, что это удачный выбор. Да, мне нужен именно объектно-ориентированный язык (подходит к моей голове намного лучше, чем какой-то иной - сужу по bash) , именно интерпретируемый (в компилируемом замучился бы с правкой исходников) и именно в паре с графической библиотекой (надо же иногда видеть питоновские объекты воочию ). Так что в принципе вопрос решён : буду осваивать Python, причём в связке с Tkinter'ом. Какие проблемы? Если кратко, то всё время возникают мелкие вопросы, ответы на которые обычно проще найти самому, чем спрашивать у других. Кавычки, отступы, методы, аргументы... и иной раз сложно сразу найти справку о том, что именно делать. Пакет документации к Питону установил, но и он не всегда помогает. Питон хорошо документирован, но не всегда могу сообразить, где именно искать нужную информацию. Вот такой разве что вопрос могу задать (потому что он как раз не мелкий) : как лучше чайнику писать программы : в виде одного скрипта или в виде нескольких скриптов, выполняющих каждый свою часть работы? Спрашиваю потому что, по-моему, проще передавать данные из одного простенького скрипта в другой подобный же, чем соединять их в один сложный - у меня тут с переменными какие-то непонятки : по отдельности скриптики работают, а соединишь - начинается нечто непонятное. Или лучше сначала с переменными как следует разобраться? -------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
25.8.2010, 20:02
Сообщение
#2
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Python вообще хороший выбор, можно вместо Tkinter-а использовать другие модули для работы с графикой PyGTK PyQt и другие.
После старого доброго паскаля система отступов у меня по первости воспринималась достаточно дико но сейчас привык и дискомфорта уже не испытываю ( правда Geany иногда глючит при переносе кусков кода из проги в прогу и отступы приходится в kwrite править ). Опять же типы переменных не надо жестко задавать как в паскале. На сегодняшний день единственное что мне не нравится в нем это 'ленивые' логические операторы, но это в общем обходимо условиями хоть и на мой взгляд не удобно. На мой взгляд простые программы проще писать одним скриптом, для сложных можно выделить подпрограммы в отдельный модуль ( если планируется использовать их еще в других проектах ). С переменными разбираться нужно, я например страдаю излишней глобализацией, хотя по уму лучше обходиться по возможности return -ом при работе с функциями. Сообщение отредактировал kostyalamer - 25.8.2010, 20:03 |
|
|
25.8.2010, 22:12
Сообщение
#3
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
Насколько я понимаю, в Tkinter'е есть всё для начала (и с большим избытком), так что не буду усложнять : пусть пока будет один Tkinter.
Отступы меня тоже сначала озадачили - непривычно как-то, что они так много значат. Но привык уже. А вот насчёт поиска ответов на всяческие мелкие вопросы. Никак не получается через sys.argv передать из одного скрипта в другой значение переменной. Всё получаю сообщение Код TypeError: 'list' object is not callable и не могу выяснить, что делать. -------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
25.8.2010, 22:50
Сообщение
#4
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Иван посмотри тут : http://www.python.su/forum/viewtopic.php?id=7791
а вот очень интересный хелп по модулям : http://wiki.linuxformat.ru/index.php/LXF77:Python |
|
|
11.9.2010, 18:55
Сообщение
#5
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
Поставил пакет tk-demos - коллекция скриптов для демонстрации возможностей Tk, с возможностью правки на ходу. Очень наглядная штука, удобно поупражняться для начала, а главное - подсказывает идеи. Правда, скрипты на Tcl А есть подобный пакет (желательно тоже для Tk) со скриптами на Питоне? В альтовских репозиториях вроде нет.
-------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
11.9.2010, 19:14
Сообщение
#6
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Поставил пакет tk-demos - коллекция скриптов для демонстрации возможностей Tk, с возможностью правки на ходу. Очень наглядная штука, удобно поупражняться для начала, а главное - подсказывает идеи. Правда, скрипты на Tcl А есть подобный пакет (желательно тоже для Tk) со скриптами на Питоне? В альтовских репозиториях вроде нет. Такого не видел, а вот , кстати полезная ссылочка http://www.tkdocs.com/tutorial/onepage.html она универсальна для Tkinter-а и Tcl. вроде бы я ее еще здесь не упоминал. |
|
|
12.9.2010, 23:31
Сообщение
#7
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
Константин, вот я потренировался на чём попало и вернулся к wmfon'у - надо же попробовать прикрутить всё-таки предпросмотр. Итак, кнопка выбора должна сначала вызвать функцию предпросмотра; когда понравившийся файл выбран, то запускается твоя функция смены обоев (имя выбранного файла передаётся ей через переменную). И вот во что дело упёрлось : ведь tkFileDialog.askopenfilename (и, по-моему, все функции в tkFileDialog) - "одноразовый", а потому для последовательного просмотра картинок не годится. А есть в Питоне что-то такое, чтобы можно было, к примеру, одинарными щелчками мыши просматривать файлы в каталоге, а двойным щелчком - завершать функцию просмотра и вызывать функцию выбора обоев? Иначе говоря, есть ли файловый диалог, понимающий несколько разных способов выбора файла и реагирующий на них по-разному? Может, тут не Tkinter лучше использовать?
-------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
12.9.2010, 23:57
Сообщение
#8
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
В Tkinter-е такого диалога с предпросмотром содержимого вроде нет, делать предпросмотр посредством canvas тоже не очень хорошо программа сразу потянет за собой pyton-module-imaging а это довольно много всякой гадости ( которая в том же Antique будет лишней ) + зависимость от Qt. Есть другая идея посмотреть в сторону внешнего просмотровщика возвращающего имя файла, в таком варианте от файлового диалога можно вообще избавиться.
|
|
|
13.9.2010, 0:04
Сообщение
#9
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
А какой в Antique просмотровщик? Или тут можно не пристёгиваться к определённой программе?
-------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
13.9.2010, 0:14
Сообщение
#10
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
|
|
|
13.9.2010, 18:05
Сообщение
#11
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
Всё вроде просто : пишу функцию, которая запускает (к примеру) mirage, ловит адрес последнего открытого в нём файла и передаёт его в функцию выбора обоев. Но не могу найти, как заставить просмотровщик возвращать упомянутый адрес и как этот адрес ловить, и как вообще питоновские скрипты обмениваются данными с внешними программами. Методы в модуле subprocess ведь вроде не для этого?
-------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
13.9.2010, 20:31
Сообщение
#12
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Иван , все на самом деле не очень просто , было бы просто я бы давно это сам написал . Прогу даже с параметром можно вызвать используя модуль os
вот пример из того что сейчас пишу : import os #............. os.system('mplayer cdda:// -cache 2500') # играем аудиодиск модулем subprocess( вообще очень интересная штука) тоже можно решить эту проблему ( правда я его еще не ковырял ), в общем тебе и карты в руки, и в mirage не упирайся может тот же eog или что другое будет проще приделать к wmfon-у |
|
|
13.9.2010, 20:59
Сообщение
#13
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
mirage с помощью os.system я уже вызывал, и тоже с параметрами, и не сомневаюсь, что и другой просмотровщик можно так же использовать; тут нет проблемы. Мне другое не совсем понятно : получается, нет простого способа отслеживания из питоновского скрипта того, какие файлы открывает им же вызванная внешняя программа? То есть дело-то не в деталях, а вообще в том, как питоновские скрипты общаются с другими программами. Вот эта группа модулей - os, sys, subprocess и т.п. - для этого (кроме прочего) предназначена, их и надо ковырять? Я, честно говоря, думал, что отслеживание действий программы, которая вызвана из скрипта - вполне обычное дело (программу ведь вызываешь ради некого результата, так как же за ним не проследить?), и должна быть какая-то готовая функция для этого. Но если её нет, придётся в самом деле поразмыслить
-------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
13.9.2010, 21:18
Сообщение
#14
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Размышлять придется ! При запуске программы через os.system управление полностью передается программе ( хотя думаю можно и фоновым режимом поиграться и вывод в файл переназначить, а этот файл уже сканировать питоновской прогой ) модуль subprocess позволяет запустить внешнюю прогу параллельно основной, но с ним я пока еще не работал и что можно из этого получить не знаю. Так что простор для творчества огромный
|
|
|
13.9.2010, 21:39
Сообщение
#15
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
Теперь уже яснее. Во всяком случае, понятно, где зарыта собака и как примерно её выкапывать; как понятно и то, что зарыта довольно глубоко Отделаюсь от срочных дел - займусь. В любом случае, придётся немного в теорию углубиться, а то насчёт взаимодействия процессов у меня весьма поверхностные знания
P.S. Тему переименовал : очевидно, что Tkinter - нечто вторичное. -------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
15.9.2010, 20:17
Сообщение
#16
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
Кстати, когда требуется как можно более полная информация по какому-то модулю, классу и т.п., то где лучше искать? Вот здесь : http://www.python.org/doc ?
-------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
15.9.2010, 21:45
Сообщение
#17
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Кстати, когда требуется как можно более полная информация по какому-то модулю, классу и т.п., то где лучше искать? Вот здесь : http://www.python.org/doc ? Очень неплохо посмотреть еще здесь: http://python.su/ эта статейка хороша в качестве быстрой подсказки по питону: http://habrahabr.ru/blogs/python/31180/ а эта книжка гораздо глубже:http://www.intuit.ru/department/pl/python/1/ По установленным модулям помогает такой способ в консоли даем команду python , получаем консоль питона Дальше набираем , например для Tkintera: import Tkinter help (Tkinter) Наслаждаемся подробным описанием ( на английском ) |
|
|
18.9.2010, 18:00
Сообщение
#18
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Нашел описания большого количество модулей питона на русском : http://www.script-coding.info/Python/Otkidach3.html
Очень полезный хелп |
|
|
18.9.2010, 19:13
Сообщение
#19
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
Спасибо, пригодится. Но у меня проблемы не столько с английским, сколько с азами программирования (правда, ещё больше - со временем; эту хроническую проблему лучше бы не упоминать, но я, честно говоря, из-за неё никак не могу сосредоточиться на Питоне). Вот насчёт этого модуля subprocess. Экземпляр класса Popen - это объект-посредник между функцией, в которой он создаётся, и дочерним процессом? И ещё : запуск программы через shell и напрямую - а в чём принципиальная разница?
-------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
18.9.2010, 19:58
Сообщение
#20
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Спасибо, пригодится. Но у меня проблемы не столько с английским, сколько с азами программирования (правда, ещё больше - со временем; эту хроническую проблему лучше бы не упоминать, но я, честно говоря, из-за неё никак не могу сосредоточиться на Питоне). Вот насчёт этого модуля subprocess. Экземпляр класса Popen - это объект-посредник между функцией, в которой он создаётся, и дочерним процессом? И ещё : запуск программы через shell и напрямую - а в чём принципиальная разница? Со временем, проблема знакомая . Иван зачем тебе модуль subprocess, думаю что модуля os вполне хватит. n=os.popen('команда') запускает внешнюю команду ( mirage ничего в консоль к сожалению не выводит, надо подбирать чего-то другое ) и весь консольный вывод загоняет в переменную переменную в данном случае n, из этой строки и надо выдирать имя файла, как вариант. вообще с этими popen тема довольно интересная надо разбираться , я сейчас работаю примерно в том же направлении терзая из питона несчастный mplayer кстати если тебе надо что-бы внешняя команда не перехватывала управление у твоего скрипта а работала параллельно то как меня недавно осенило, надо просто ее запустить в фоне, вот в моем случае : os.system('mplayer -slave -quiet -input file=/tmp/mpinfile cdda:// &') |
|
|
18.9.2010, 20:22
Сообщение
#21
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
Иван зачем тебе модуль subprocess, думаю что модуля os вполне хватит. Да без разницы, там сейчас явное дублирование одних модулей другим, так что мне всё равно, откуда брать Popen. mirage ничего в консоль к сожалению не выводит, надо подбирать чего-то другое А какой приемлемый для Antique просмотровщик выводит имена файлов в консоль? Я вообще даже не представляю, как это определить. кстати если тебе надо что-бы внешняя команда не перехватывала управление у твоего скрипта а работала параллельно то как меня недавно осенило, надо просто ее запустить в фоне, вот в моем случае : os.system('mplayer -slave -quiet -input file=/tmp/mpinfile cdda:// &') Хорошо. Но ведь если функция просмотра запустила просмотровщик и остановилась в ожидании, когда он отключится и выдаст имя последнего открытого файла, то получается разве не то же самое? Ну перехватил он управление - и что, ведь процесс скрипта (или Питона вообще) никуда от этого не исчезнет, просто ждёт? -------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
18.9.2010, 21:03
Сообщение
#22
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
1) я тоже не знаю какой просмотровщик выводит имена в консоль, проверяется просто - запускаешь их из консоли и смотришь вывод, возможно идея вообще была ложной . Если все-таки найдешь такой посмотрим на его зависимости, тогда будет ясно подходит он для antique или нет.
2) Да в случае с wmfon-ом действительно фоновый режим скорее всего не нужен, я его привел тут как простую альтернативу модулю subprocess. PS кстати какой средой разработки пользуешься? я перепробовал много: Geany, Idle, Eric, drpython везде свои глюки и баги ( с моей субъективной точки зрения ) так все достало что сидел одно время на связке konqueror+kwrite. Но недавно нашел то что нужно - medit, работает как Geany только без глюков с неправильным отображением пробелов. Рекомендую, только в меню Вид поставь галку отображать номера строк. |
|
|
18.9.2010, 21:13
Сообщение
#23
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
проверяется просто - запускаешь их из консоли и смотришь вывод, возможно идея вообще была ложной . Если все-таки найдешь такой посмотрим на его зависимости, тогда будет ясно подходит он для antique или нет. Попробовать можно. Но почему вывод непременно в консоль? Ведь вроде бы "трубопроводу" между процессами консоль не нужна (хотя мои знания на этот счёт явно следует освежить). кстати какой средой разработки пользуешься? Как ни странно, никакой. Попробовал IDLE, что-то (не помню что) не понравилось, так что юзаю просто kate, а иногда и вовсе kwrite. Но недавно нашел то что нужно - medit Поставлю. -------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
18.9.2010, 21:22
Сообщение
#24
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Консоль это как простейший вариант, если сумеешь выдрать имя файла другим способом, прекрасно, но честно говоря пока не представляю как вряд ли просмотровщики могут вернуть его в виде параметра ( хотя возможно какие-то и могут )
|
|
|
18.9.2010, 21:43
Сообщение
#25
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
Запустил для пробы Мираж, поглядел в /proc его процесс, там много чего есть; вполне возможно, и имена файлов. Возможно. в эту сторону и нужно рыть. Правда, тогда просмотровщик в самом деле должен работать параллельно, а функция просмотра должна отлавливать из /proc его файлы и записывать в переменную; она, конечно, будет при этом менять значение, но в итоге в ней останется имя как раз последнего открытого файла, потому что его уже ничто не перезапишет. Вот так примерно. Это, конечно, просто фантазии, ничем не проверенные!
-------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
19.9.2010, 21:31
Сообщение
#26
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
Теоретически этот вариант выглядит довольно просто : запускаем из скрипта просмотровщик, узнаём номер его процесса, потом в каталоге /proc/<номер процесса>/fd вылавливаем ) дескрипторы (а через них - и имена) открываемых просмотровщиком файлов-картинок. А вот как это выразить не на русском языке, а на Питоне - вопрос. Наверное, я рассуждаю, как чайник, не знающий реалий программирования, и лучше действовать как-то по-другому; но я просто исхожу из того, что инфу о любом процессе по идее лучше брать прямо из /proc, а не добывать окольными путями.
-------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
19.9.2010, 22:10
Сообщение
#27
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Вполне осушествимый вариант, попробуй для начала это сделать без питона в консоли, поюзай /proc в мс, если выдерешь оттуда имя файла, считай пол задачи решил, остальное уже дело техники
|
|
|
19.9.2010, 23:34
Сообщение
#28
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
Во всех попадавшихся мне мануалах говорится, что в каталоге /proc/<pid>/fd открывается по одной ссылке на каждый открытый процессом файл. В действительности, как показали первые же эксперименты, всё далеко не так прямолинейно, так что сразу и не поймёшь, что к чему. Но деваться некуда, придётся углубляться в тему
-------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
28.9.2010, 19:15
Сообщение
#29
|
|
Профессионал Группа: Глоб. Модератор Сообщений: 10033 Регистрация: 22.6.2009 Вставить ник Цитата Из: Онега Пользователь №: 1352 Страна: Россия Город: Не указан Пол: Муж. Репутация: 30 |
придётся углубляться в тему Я основательно в неё углубился (работа ядра и процессов, их взаимодействие, открытие файлов, каналы, сокеты и т.п.), так что и про Питона забыл Потом вернулся к тому, о чём тут выше говорилось, и получилось следующее. Кроме "нормального" способа открытия файлов процессами (о котором везде пишется), есть ещё и некий другой (о котором мне что-то не попадалось упоминаний). Нормальный - это когда ядро открывает запрошенный процессом файл, а процессу даёт на него ссылку, которую легко можно подсмотреть в каталоге /proc/<pid>/fd; что нам и нужно. Например, так открывают файлы OpenOffice.org Writer, Kaffeine, Kpdf и многие другие. Но Mirage (как и вообще все проверенные мною просмотровщики) использует другой способ, внешне выражающийся в том, что при открытии первого файла в /proc/<pid>/fd появляются inotify и два сокета. Насколько я понимаю, Мираж через эти сокеты просто закачивает файлы (картинки, то есть) в своё пространство, а ядро тут вроде как остаётся не у дел, а потому в /proc имени этого файла обнаружить не удаётся. Я даже утилитой lsof выпытывал : какой прогой открыт вот этот файл(картинка)? lsof отвечает : никакой! но вот же эта картинка передо мной, в Мираже открыта! Короче, вряд ли из /proc тут можно выцепить имя файла, разве что из самой программы. -------------------- Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
|
|
|
28.9.2010, 20:11
Сообщение
#30
|
|
Профессионал Группа: Пользователь Сообщений: 4384 Регистрация: 17.9.2009 Вставить ник Цитата Пользователь №: 1617 Страна: Россия Город: Санкт-Петербург Пол: Муж. Репутация: 20 |
Иван, в таком варианте надо наверное тебе написать просмотровщик для wmfon-а самому, моя идея к сожалению себя не оправдала. Фиг с ним пускай тянет за собой модуль imaging, это наверное все-равно более перспективный вариант чем попытка выдрать имя файла из того-же mirage.
|
|
|
Текстовая версия | Сейчас: 24.4.2024, 1:36 | |