Форум сайта python.su
Господа, помогите, если кто знает.
Предположми, я запускаю из скрипта внешнюю программу, имею его PID.
Как нибудь можно из python, получить информацию(номера, с чем связаны, получить путь к файлу соответствующего дескриптора) по файловым дескрипторам только что запущенного процесса.
Также интересно, могу ли я в запущенном процессе подменить дескрипторы другими. В общем, было бы хорошо, чтобы, например, лог файлы вместо записи в логи, уходили на сокеты или в другие файлы.
Офлайн
если stdout то смотрите в сторону пайпов. там можно будет поймать весь вывод и перенаправить его куда захотите.
Офлайн
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/ Можете собрать питоновым модулем и звать прям из питона.
Офлайн
Ed
Вот еще одна реализация хака, на Цэ: http://code.google.com/p/refiler/ Можете собрать питоновым модулем и звать прям из питона.
Офлайн
Хорошо. Тогда так: можно ли перенаправить вывод из открытых процессом дескрипторов на мной определённые дескрипторы?
Офлайн
Боюсь, так просто с дескрипторами не выйдет. Смотреть на файл лога на манер tail и складывать увиденное куда нужно — довольно легко.
Офлайн
Андрей Светлов
Боюсь, так просто с дескрипторами не выйдет.
Смотреть на файл лога на манер tail и складывать увиденное куда нужно — довольно легко.
Отредактировано vvpoloskin (Июнь 5, 2012 20:56:34)
Офлайн
Кодом не помогу, поскольку сам таким не занимался. Но на сколько я помню операционки позволяют подписываться на события файловой системы.
Посмотрите здесь: http://stackoverflow.com/questions/182197/how-do-i-watch-a-file-for-changes-using-python
Также, если пишите под linux, обратите внимание на pyinotify
Офлайн