vvpoloskin
Июнь 3, 2012 18:12:12
Господа, помогите, если кто знает.
Предположми, я запускаю из скрипта внешнюю программу, имею его PID.
Как нибудь можно из python, получить информацию(номера, с чем связаны, получить путь к файлу соответствующего дескриптора) по файловым дескрипторам только что запущенного процесса.
Также интересно, могу ли я в запущенном процессе подменить дескрипторы другими. В общем, было бы хорошо, чтобы, например, лог файлы вместо записи в логи, уходили на сокеты или в другие файлы.
dehun
Июнь 3, 2012 18:56:55
если stdout то смотрите в сторону пайпов. там можно будет поймать весь вывод и перенаправить его куда захотите.
vvpoloskin
Июнь 4, 2012 04:46:50
dehun
если stdout то смотрите в сторону пайпов. там можно будет поймать весь вывод и перенаправить его куда захотите.
Нет, к сожалению не stdout:( Именно произвольный дескриптор, логи записываются в файл дочерним процессом. Мне бы как-нибудь их обрабатывать.
Это достаточно непросто будет не только на Питоне сделать и очень системо-зависимо.
На линухе то в /proc/<PID>/fd/ лежат линки на открытые файлы. В BSD вроде было /dev/fd* или что-то подобно Это насчет найти. Насчет подменить думаю еще хуже дело обстоит.
Вот тут описан один жестокий хак:
http://ingvar.blog.redpill-linpro.com/2010/07/10/changing-a-process-file-descriptor-on-the-fly/, думаю, что можно найти и другие.
Вот еще одна реализация хака, на Цэ:
http://code.google.com/p/refiler/ Можете собрать питоновым модулем и звать прям из питона.
vvpoloskin
Июнь 4, 2012 19:29:37
Ed
Вот еще одна реализация хака, на Цэ: http://code.google.com/p/refiler/ Можете собрать питоновым модулем и звать прям из питона.
Совсем hardcore:) Можно уж тогда самому процесс под ptrace запустить, поставить бряку на open, и заменть на что надо:)
vvpoloskin
Июнь 4, 2012 20:23:30
Хорошо. Тогда так: можно ли перенаправить вывод из открытых процессом дескрипторов на мной определённые дескрипторы?
Андрей Светлов
Июнь 4, 2012 20:57:56
Боюсь, так просто с дескрипторами не выйдет.
Смотреть на файл лога на манер tail и складывать увиденное куда нужно — довольно легко.
vvpoloskin
Июнь 5, 2012 20:49:52
Андрей Светлов
Боюсь, так просто с дескрипторами не выйдет.
Смотреть на файл лога на манер tail и складывать увиденное куда нужно — довольно легко.
А можно ли какой-нибудь пример, как используя средства python реализовать tail -f. Что-нибудь получше, чем бесконечный цикл.
GaiveR
Июнь 5, 2012 23:45:14
Кодом не помогу, поскольку сам таким не занимался. Но на сколько я помню операционки позволяют подписываться на события файловой системы.
Посмотрите здесь:
http://stackoverflow.com/questions/182197/how-do-i-watch-a-file-for-changes-using-pythonТакже, если пишите под linux, обратите внимание на
pyinotify