Python :code.interact (local=locals ())где stdin/stdout недоступны

В Python следующий фрагмент кода откроет интерактивную оболочку при выполнении.

import code; code.interact(local = locals())

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

Теперь вызов.

Программное обеспечение, которое я использую (, которое написано на Django, кстати, )использует какой-то механизм планирования, который затем взаимодействует с другим процессом Python, над которым я не контролирую ничего, кроме редактируя его код. У меня нет ввода для него, кроме переменных, которые я отправляю на обработку.

Однако,Я не знаю, как работает код, так как документация очень плохая, поэтому я хотел использовать метод code.interact, чтобы разобраться во всем.

Но этот процесс запускается где-то в фоновом режиме каким-то специальным программным обеспечением для планирования, поэтому поток не идет от приложения Django к частям, которые я хочу изучить. Вместо этого отправляются сигнал и объект, которые затем запускаются позже, в произвольное время (где-то между 10 -200 мс )в совершенно другом процессе. Когда сигнал и объект получены, stdin/stdout вообще не учитывается.

Поэтому я решил, что вместо использования stdin/stdout для связи с code.interactя мог бы использовать дескриптор файла или сокет Unix, указав параметр readfunc. Я пробовал это, open()используя файл и сокет, но безрезультатно.

Теперь я пытаюсь заставить это работать только из самого процесса Django, поэтому даже проблема планирования не может быть и речи, и хотя интерактивная оболочка действительно запускается, она немедленно закрывается, не принимая ни файл с командами в качестве содержимого, ни сокет Unix, к которому передаются команды Python.

Короче говоря; возможно ли взаимодействовать с интерактивной оболочкой, вызванной code.interactкаким-либо другим способом, кроме stdin/stdout? Если да, то как?

Заранее спасибо.

7
задан Teekin 10 August 2012 в 13:21
поделиться