IPB

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V   1 2 3 > »   
Ответить в эту темуОткрыть новую тему
> Учимся ездить на Питоне, опыт освоения языка Python с нуля
Поделиться
ИВК
сообщение 25.8.2010, 19:28
Сообщение #1


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9984
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


Несколько дней назад начал пробовать связку Python + Tkinter. С чего началось - сказано здесь . Какие первые выводы?
Прежде всего, убедился, что это удачный выбор. Да, мне нужен именно объектно-ориентированный язык (подходит к моей голове намного лучше, чем какой-то иной - сужу по bash) , именно интерпретируемый (в компилируемом замучился бы с правкой исходников) и именно в паре с графической библиотекой (надо же иногда видеть питоновские объекты воочию smile.gif ).
Так что в принципе вопрос решён : буду осваивать Python, причём в связке с Tkinter'ом.
Какие проблемы? Если кратко, то всё время возникают мелкие вопросы, ответы на которые обычно проще найти самому, чем спрашивать у других. Кавычки, отступы, методы, аргументы... и иной раз сложно сразу найти справку о том, что именно делать. Пакет документации к Питону установил, но и он не всегда помогает. Питон хорошо документирован, но не всегда могу сообразить, где именно искать нужную информацию.
Вот такой разве что вопрос могу задать (потому что он как раз не мелкий) : как лучше чайнику писать программы : в виде одного скрипта или в виде нескольких скриптов, выполняющих каждый свою часть работы? Спрашиваю потому что, по-моему, проще передавать данные из одного простенького скрипта в другой подобный же, чем соединять их в один сложный - у меня тут с переменными какие-то непонятки : по отдельности скриптики работают, а соединишь - начинается нечто непонятное. Или лучше сначала с переменными как следует разобраться?


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 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


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9984
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


Насколько я понимаю, в Tkinter'е есть всё для начала (и с большим избытком), так что не буду усложнять : пусть пока будет один Tkinter.
Отступы меня тоже сначала озадачили - непривычно как-то, что они так много значат. Но привык уже.
А вот насчёт поиска ответов на всяческие мелкие вопросы. Никак не получается через sys.argv передать из одного скрипта в другой значение переменной. Всё получаю сообщение
Код
TypeError: 'list' object is not callable

и не могу выяснить, что делать.


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 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


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9984
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


Поставил пакет tk-demos - коллекция скриптов для демонстрации возможностей Tk, с возможностью правки на ходу. Очень наглядная штука, удобно поупражняться для начала, а главное - подсказывает идеи. Правда, скрипты на Tcl smile.gif А есть подобный пакет (желательно тоже для Tk) со скриптами на Питоне? В альтовских репозиториях вроде нет.


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 11.9.2010, 19:14
Сообщение #6


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Цитата(IVK @ 11.9.2010, 18:55) *
Поставил пакет tk-demos - коллекция скриптов для демонстрации возможностей Tk, с возможностью правки на ходу. Очень наглядная штука, удобно поупражняться для начала, а главное - подсказывает идеи. Правда, скрипты на Tcl smile.gif А есть подобный пакет (желательно тоже для Tk) со скриптами на Питоне? В альтовских репозиториях вроде нет.

Такого не видел, а вот , кстати полезная ссылочка http://www.tkdocs.com/tutorial/onepage.html она универсальна для
Tkinter-а и Tcl. вроде бы я ее еще здесь не упоминал.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ИВК
сообщение 12.9.2010, 23:31
Сообщение #7


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9984
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


Константин, вот я потренировался на чём попало и вернулся к wmfon'у - надо же попробовать прикрутить всё-таки предпросмотр. Итак, кнопка выбора должна сначала вызвать функцию предпросмотра; когда понравившийся файл выбран, то запускается твоя функция смены обоев (имя выбранного файла передаётся ей через переменную). И вот во что дело упёрлось : ведь tkFileDialog.askopenfilename (и, по-моему, все функции в tkFileDialog) - "одноразовый", а потому для последовательного просмотра картинок не годится. А есть в Питоне что-то такое, чтобы можно было, к примеру, одинарными щелчками мыши просматривать файлы в каталоге, а двойным щелчком - завершать функцию просмотра и вызывать функцию выбора обоев? Иначе говоря, есть ли файловый диалог, понимающий несколько разных способов выбора файла и реагирующий на них по-разному? Может, тут не Tkinter лучше использовать?


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 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


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9984
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


А какой в Antique просмотровщик? Или тут можно не пристёгиваться к определённой программе?


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 13.9.2010, 0:14
Сообщение #10


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Цитата(IVK @ 13.9.2010, 0:04) *
А какой в Antique просмотровщик? Или тут можно не пристёгиваться к определённой программе?

В Antique mirage, но думаю что можно не пристегиваться,лишь бы этот просмотровщик qt за собой не тянул по возможности .
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ИВК
сообщение 13.9.2010, 18:05
Сообщение #11


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9984
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


Всё вроде просто : пишу функцию, которая запускает (к примеру) mirage, ловит адрес последнего открытого в нём файла и передаёт его в функцию выбора обоев. Но не могу найти, как заставить просмотровщик возвращать упомянутый адрес и как этот адрес ловить, и как вообще питоновские скрипты обмениваются данными с внешними программами. Методы в модуле subprocess ведь вроде не для этого?


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 13.9.2010, 20:31
Сообщение #12


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Иван , все на самом деле не очень просто , было бы просто я бы давно это сам написал wink.gif . Прогу даже с параметром можно вызвать используя модуль os
вот пример из того что сейчас пишу :
import os
#.............
os.system('mplayer cdda:// -cache 2500') # играем аудиодиск

модулем subprocess( вообще очень интересная штука) тоже можно решить эту проблему ( правда я его еще не ковырял ), в общем тебе и карты в руки, и в mirage не упирайся может тот же eog или что другое будет проще приделать к wmfon-у smile.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ИВК
сообщение 13.9.2010, 20:59
Сообщение #13


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9984
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


mirage с помощью os.system я уже вызывал, и тоже с параметрами, и не сомневаюсь, что и другой просмотровщик можно так же использовать; тут нет проблемы. Мне другое не совсем понятно : получается, нет простого способа отслеживания из питоновского скрипта того, какие файлы открывает им же вызванная внешняя программа? То есть дело-то не в деталях, а вообще в том, как питоновские скрипты общаются с другими программами. Вот эта группа модулей - os, sys, subprocess и т.п. - для этого (кроме прочего) предназначена, их и надо ковырять? Я, честно говоря, думал, что отслеживание действий программы, которая вызвана из скрипта - вполне обычное дело (программу ведь вызываешь ради некого результата, так как же за ним не проследить?), и должна быть какая-то готовая функция для этого. Но если её нет, придётся в самом деле поразмыслить smile.gif


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 13.9.2010, 21:18
Сообщение #14


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Размышлять придется ! При запуске программы через os.system управление полностью передается программе ( хотя думаю можно и фоновым режимом поиграться и вывод в файл переназначить, а этот файл уже сканировать питоновской прогой ) модуль subprocess позволяет запустить внешнюю прогу параллельно основной, но с ним я пока еще не работал и что можно из этого получить не знаю. Так что простор для творчества огромный smile.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ИВК
сообщение 13.9.2010, 21:39
Сообщение #15


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9984
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


Теперь уже яснее. Во всяком случае, понятно, где зарыта собака и как примерно её выкапывать; как понятно и то, что зарыта довольно глубоко smile.gif Отделаюсь от срочных дел - займусь. В любом случае, придётся немного в теорию углубиться, а то насчёт взаимодействия процессов у меня весьма поверхностные знания wink.gif

P.S. Тему переименовал : очевидно, что Tkinter - нечто вторичное.


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ИВК
сообщение 15.9.2010, 20:17
Сообщение #16


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9984
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


Кстати, когда требуется как можно более полная информация по какому-то модулю, классу и т.п., то где лучше искать? Вот здесь : http://www.python.org/doc ?


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 15.9.2010, 21:45
Сообщение #17


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Цитата(IVK @ 15.9.2010, 20:17) *
Кстати, когда требуется как можно более полная информация по какому-то модулю, классу и т.п., то где лучше искать? Вот здесь : 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)
Наслаждаемся подробным описанием ( на английском ) smile.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 18.9.2010, 18:00
Сообщение #18


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Нашел описания большого количество модулей питона на русском : http://www.script-coding.info/Python/Otkidach3.html
Очень полезный хелп smile.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ИВК
сообщение 18.9.2010, 19:13
Сообщение #19


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9984
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


Спасибо, пригодится. Но у меня проблемы не столько с английским, сколько с азами программирования (правда, ещё больше - со временем; эту хроническую проблему лучше бы не упоминать, но я, честно говоря, из-за неё никак не могу сосредоточиться на Питоне). Вот насчёт этого модуля subprocess. Экземпляр класса Popen - это объект-посредник между функцией, в которой он создаётся, и дочерним процессом? И ещё : запуск программы через shell и напрямую - а в чём принципиальная разница?


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 18.9.2010, 19:58
Сообщение #20


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Цитата(IVK @ 18.9.2010, 19:13) *
Спасибо, пригодится. Но у меня проблемы не столько с английским, сколько с азами программирования (правда, ещё больше - со временем; эту хроническую проблему лучше бы не упоминать, но я, честно говоря, из-за неё никак не могу сосредоточиться на Питоне). Вот насчёт этого модуля subprocess. Экземпляр класса Popen - это объект-посредник между функцией, в которой он создаётся, и дочерним процессом? И ещё : запуск программы через shell и напрямую - а в чём принципиальная разница?

Со временем, проблема знакомая smile.gif . Иван зачем тебе модуль subprocess, думаю что модуля os вполне хватит.
n=os.popen('команда') запускает внешнюю команду ( mirage ничего в консоль к сожалению не выводит, надо подбирать чего-то другое ) и весь консольный вывод загоняет в переменную переменную в данном случае n, из этой строки и надо выдирать имя файла, как вариант. вообще с этими popen тема довольно интересная надо разбираться , я сейчас работаю примерно в том же направлении терзая из питона несчастный mplayer smile.gif
кстати если тебе надо что-бы внешняя команда не перехватывала управление у твоего скрипта а работала параллельно то как меня недавно осенило, надо просто ее
запустить в фоне, вот в моем случае :
os.system('mplayer -slave -quiet -input file=/tmp/mpinfile cdda:// &')
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ИВК
сообщение 18.9.2010, 20:22
Сообщение #21


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9984
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


Цитата(kostyalamer @ 18.9.2010, 19:58) *
Иван зачем тебе модуль subprocess, думаю что модуля os вполне хватит.

Да без разницы, там сейчас явное дублирование одних модулей другим, так что мне всё равно, откуда брать Popen.

Цитата(kostyalamer @ 18.9.2010, 19:58) *
mirage ничего в консоль к сожалению не выводит, надо подбирать чего-то другое

А какой приемлемый для Antique просмотровщик выводит имена файлов в консоль? Я вообще даже не представляю, как это определить.

Цитата(kostyalamer @ 18.9.2010, 19:58) *
кстати если тебе надо что-бы внешняя команда не перехватывала управление у твоего скрипта а работала параллельно то как меня недавно осенило, надо просто ее
запустить в фоне, вот в моем случае :
os.system('mplayer -slave -quiet -input file=/tmp/mpinfile cdda:// &')

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


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 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


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9984
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


Цитата(kostyalamer @ 18.9.2010, 21:03) *
проверяется просто - запускаешь их из консоли и смотришь вывод, возможно идея вообще была ложной . Если все-таки найдешь такой посмотрим на его зависимости, тогда будет ясно подходит он для antique или нет.

Попробовать можно. Но почему вывод непременно в консоль? Ведь вроде бы "трубопроводу" между процессами консоль не нужна (хотя мои знания на этот счёт явно следует освежить).

Цитата(kostyalamer @ 18.9.2010, 21:03) *
кстати какой средой разработки пользуешься?

Как ни странно, никакой. Попробовал IDLE, что-то (не помню что) не понравилось, так что юзаю просто kate, а иногда и вовсе kwrite.

Цитата(kostyalamer @ 18.9.2010, 21:03) *
Но недавно нашел то что нужно - medit

Поставлю.


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 18.9.2010, 21:22
Сообщение #24


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Консоль это как простейший вариант, если сумеешь выдрать имя файла другим способом, прекрасно, но честно говоря пока не представляю как вряд ли просмотровщики могут вернуть его в виде параметра ( хотя возможно какие-то и могут )
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ИВК
сообщение 18.9.2010, 21:43
Сообщение #25


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9984
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


Запустил для пробы Мираж, поглядел в /proc его процесс, там много чего есть; вполне возможно, и имена файлов. Возможно. в эту сторону и нужно рыть. Правда, тогда просмотровщик в самом деле должен работать параллельно, а функция просмотра должна отлавливать из /proc его файлы и записывать в переменную; она, конечно, будет при этом менять значение, но в итоге в ней останется имя как раз последнего открытого файла, потому что его уже ничто не перезапишет. Вот так примерно. Это, конечно, просто фантазии, ничем не проверенные!


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ИВК
сообщение 19.9.2010, 21:31
Сообщение #26


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9984
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


Теоретически этот вариант выглядит довольно просто : запускаем из скрипта просмотровщик, узнаём номер его процесса, потом в каталоге /proc/<номер процесса>/fd вылавливаем ) дескрипторы (а через них - и имена) открываемых просмотровщиком файлов-картинок. А вот как это выразить не на русском языке, а на Питоне - вопрос. Наверное, я рассуждаю, как чайник, не знающий реалий программирования, и лучше действовать как-то по-другому; но я просто исхожу из того, что инфу о любом процессе по идее лучше брать прямо из /proc, а не добывать окольными путями.


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 19.9.2010, 22:10
Сообщение #27


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Вполне осушествимый вариант, попробуй для начала это сделать без питона в консоли, поюзай /proc в мс, если выдерешь оттуда имя файла, считай пол задачи решил, остальное уже дело техники smile.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ИВК
сообщение 19.9.2010, 23:34
Сообщение #28


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9984
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


Во всех попадавшихся мне мануалах говорится, что в каталоге /proc/<pid>/fd открывается по одной ссылке на каждый открытый процессом файл. В действительности, как показали первые же эксперименты, всё далеко не так прямолинейно, так что сразу и не поймёшь, что к чему. Но деваться некуда, придётся углубляться в тему smile.gif


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ИВК
сообщение 28.9.2010, 19:15
Сообщение #29


Профессионал
*******

Группа: Глоб. Модератор
Сообщений: 9984
Регистрация: 22.6.2009
Вставить ник
Цитата
Из: Онега
Пользователь №: 1352
Страна: Россия
Город: Не указан
Пол: Муж.



Репутация: 30


Цитата(IVK @ 19.9.2010, 23:34) *
придётся углубляться в тему

Я основательно в неё углубился (работа ядра и процессов, их взаимодействие, открытие файлов, каналы, сокеты и т.п.), так что и про Питона забыл smile.gif Потом вернулся к тому, о чём тут выше говорилось, и получилось следующее.
Кроме "нормального" способа открытия файлов процессами (о котором везде пишется), есть ещё и некий другой (о котором мне что-то не попадалось упоминаний). Нормальный - это когда ядро открывает запрошенный процессом файл, а процессу даёт на него ссылку, которую легко можно подсмотреть в каталоге /proc/<pid>/fd; что нам и нужно. Например, так открывают файлы OpenOffice.org Writer, Kaffeine, Kpdf и многие другие. Но Mirage (как и вообще все проверенные мною просмотровщики) использует другой способ, внешне выражающийся в том, что при открытии первого файла в /proc/<pid>/fd появляются inotify и два сокета. Насколько я понимаю, Мираж через эти сокеты просто закачивает файлы (картинки, то есть) в своё пространство, а ядро тут вроде как остаётся не у дел, а потому в /proc имени этого файла обнаружить не удаётся. Я даже утилитой lsof выпытывал : какой прогой открыт вот этот файл(картинка)? lsof отвечает : никакой! но вот же эта картинка передо мной, в Мираже открыта!
Короче, вряд ли из /proc тут можно выцепить имя файла, разве что из самой программы.


--------------------
Не пью, не курю, не смотрю телевизор, не пользуюсь Windows
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kostyalamer
сообщение 28.9.2010, 20:11
Сообщение #30


Профессионал
*******

Группа: Пользователь
Сообщений: 4384
Регистрация: 17.9.2009
Вставить ник
Цитата
Пользователь №: 1617
Страна: Россия
Город: Санкт-Петербург
Пол: Муж.



Репутация: 20


Иван, в таком варианте надо наверное тебе написать просмотровщик для wmfon-а самому, моя идея к сожалению себя не оправдала. Фиг с ним пускай тянет за собой модуль imaging, это наверное все-равно более перспективный вариант чем попытка выдрать имя файла из того-же mirage.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

4 страниц V   1 2 3 > » 
Ответить в эту темуОткрыть новую тему
( Гостей: 1 )
Пользователей: 0

 



RSS Текстовая версия Сейчас: 28.3.2024, 11:57