在 Python 中,以下代码片段将在执行时打开一个交互式 shell。
import code; code.interact(local = locals())
事实证明,这对于调试大量文档不足的代码非常有用。即使没有调试器,也可以使用 shell 导航程序内环境并弄清楚发生了什么。到目前为止,一切都很好。
现在是挑战。
我正在使用的软件(顺便说一下,它是用 Django 编写的)使用某种调度机制,然后与另一个Python 进程对话,除了编辑它的代码之外,我无法控制它。除了发送给它进行处理的变量之外,我没有任何输入。
但是,我不知道代码是如何工作的,因为文档很差,所以我想用这个code.interact
方法来解决问题。
但是这个过程是由一些特殊的调度软件在后台某个地方启动的,所以流程不会从 Django 应用程序到我希望检查的部分。相反,会发送一个信号和对象,然后在一个完全不同的进程中的任意时间(10-200 毫秒之间的任意时间)运行它们。当接收到信号和对象时,stdin/stdout 就完全不在了。
因此,我认为code.interact
可以通过指定readfunc
参数来使用文件句柄或 Unix 套接字,而不是使用 stdin/stdout 与之通信。我已经通过open()
文件和套接字尝试过这个,但无济于事。
现在我试图让它仅仅从 Django 进程本身工作,所以即使是调度问题也是不可能的,虽然交互式 shell 确实启动了,但它立即关闭,既不接受带有命令作为内容的文件,也不接受Python 命令通过管道传输到的 Unix 套接字。
使长话短说; 是否可以与通过code.interact
stdin/stdout 以外的其他方式调用的交互式 shell 进行通信?如果是这样,怎么做?
提前致谢。