Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 3, 2012 18:12:12

vvpoloskin
От:
Зарегистрирован: 2011-09-02
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Файловые дескрипторы.

Господа, помогите, если кто знает.
Предположми, я запускаю из скрипта внешнюю программу, имею его PID.
Как нибудь можно из python, получить информацию(номера, с чем связаны, получить путь к файлу соответствующего дескриптора) по файловым дескрипторам только что запущенного процесса.

Также интересно, могу ли я в запущенном процессе подменить дескрипторы другими. В общем, было бы хорошо, чтобы, например, лог файлы вместо записи в логи, уходили на сокеты или в другие файлы.



Офлайн

#2 Июнь 3, 2012 18:56:55

dehun
От: Ukraine::Kiev
Зарегистрирован: 2012-04-25
Сообщения: 26
Репутация: +  3  -
Профиль   Отправить e-mail  

Файловые дескрипторы.

если stdout то смотрите в сторону пайпов. там можно будет поймать весь вывод и перенаправить его куда захотите.

Офлайн

#3 Июнь 4, 2012 04:46:50

vvpoloskin
От:
Зарегистрирован: 2011-09-02
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Файловые дескрипторы.

dehun
если stdout то смотрите в сторону пайпов. там можно будет поймать весь вывод и перенаправить его куда захотите.
Нет, к сожалению не stdout:( Именно произвольный дескриптор, логи записываются в файл дочерним процессом. Мне бы как-нибудь их обрабатывать.



Офлайн

#4 Июнь 4, 2012 16:28:22

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Файловые дескрипторы.

Это достаточно непросто будет не только на Питоне сделать и очень системо-зависимо.
На линухе то в /proc/<PID>/fd/ лежат линки на открытые файлы. В BSD вроде было /dev/fd* или что-то подобно Это насчет найти. Насчет подменить думаю еще хуже дело обстоит.
Вот тут описан один жестокий хак: http://ingvar.blog.redpill-linpro.com/2010/07/10/changing-a-process-file-descriptor-on-the-fly/, думаю, что можно найти и другие.



Офлайн

#5 Июнь 4, 2012 17:06:04

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Файловые дескрипторы.

Вот еще одна реализация хака, на Цэ: http://code.google.com/p/refiler/ Можете собрать питоновым модулем и звать прям из питона.



Офлайн

#6 Июнь 4, 2012 19:29:37

vvpoloskin
От:
Зарегистрирован: 2011-09-02
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Файловые дескрипторы.

Ed
Вот еще одна реализация хака, на Цэ: http://code.google.com/p/refiler/ Можете собрать питоновым модулем и звать прям из питона.

Совсем hardcore:) Можно уж тогда самому процесс под ptrace запустить, поставить бряку на open, и заменть на что надо:)



Офлайн

#7 Июнь 4, 2012 20:23:30

vvpoloskin
От:
Зарегистрирован: 2011-09-02
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Файловые дескрипторы.

Хорошо. Тогда так: можно ли перенаправить вывод из открытых процессом дескрипторов на мной определённые дескрипторы?



Офлайн

#8 Июнь 4, 2012 20:57:56

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Файловые дескрипторы.

Боюсь, так просто с дескрипторами не выйдет. Смотреть на файл лога на манер tail и складывать увиденное куда нужно — довольно легко.



Офлайн

#9 Июнь 5, 2012 20:49:52

vvpoloskin
От:
Зарегистрирован: 2011-09-02
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Файловые дескрипторы.

Андрей Светлов
Боюсь, так просто с дескрипторами не выйдет.
Смотреть на файл лога на манер tail и складывать увиденное куда нужно — довольно легко.

А можно ли какой-нибудь пример, как используя средства python реализовать tail -f. Что-нибудь получше, чем бесконечный цикл.



Отредактировано vvpoloskin (Июнь 5, 2012 20:56:34)

Офлайн

#10 Июнь 5, 2012 23:45:14

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

Файловые дескрипторы.

Кодом не помогу, поскольку сам таким не занимался. Но на сколько я помню операционки позволяют подписываться на события файловой системы.

Посмотрите здесь: http://stackoverflow.com/questions/182197/how-do-i-watch-a-file-for-changes-using-python

Также, если пишите под linux, обратите внимание на pyinotify



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version