В 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? Если да, то как?
Заранее спасибо.