Python:code.interact(local = locals()),其中stdin / stdout不可用

在Python中,以下代码片段将在执行后打开交互式shell。

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

这已被证明对于调试很多文档记录不佳的代码非常有用。 人们可以使用shell来浏览程序内环境并找出发生了什么,即使没有调试器。 到现在为止还挺好。

现在是挑战。

我使用的软件(顺便说就是用Django编写的)使用某种调度机制,然后再与另一个Python进程交流,除了编辑代码之外,我无法控制它。 除了发送给它进行处理的变量之外,我没有任何输入。

但是,由于文档非常差,我不知道代码如何工作,所以我想使用code.interact方法来解决问题。

但是这个过程是由一些特殊的调度软件在背景的某个地方开始的,所以流程并不是从Django应用程序到我希望检查的部分。 相反,信号和对象被发送,然后在任意时间(10-200ms之间的任何时间)以完全不同的过程运行。 当接收到信号和对象时,标准输出/标准输出完全不在画面中。

所以我想,不是使用stdin / stdout与code.interact进行通信, code.interact通过指定readfunc参数来使用文件句柄或Unix套接字。 我尝试过open()一个文件和套接字,但无济于事。

现在我试图仅仅从Django进程本身开始工作,所以即使排程问题也不存在问题,并且在交互式shell实际启动时,它立即关闭,既不接受以命令作为内容的文件,也不接受一个用于管理Python命令的Unix套接字。

使长话短说; 是否可以通过除stdin / stdout之外的其他方式与code.interact调用的交互式shell进行通信? 如果是这样,怎么样?

提前致谢。


我并不完全关注调度器和django等等。

但要回答你的问题的核心:

#!/usr/bin/python

import code

f = open('input.txt', 'r')

def readfunc(prompt):
    return f.readline()

code.interact(readfunc=readfunc)

然后在一个终端中运行:

$ ./test.py 
Python 2.7.3 (default, Apr 20 2012, 22:39:59) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)

注意你没有得到提示。

然后在另一个终端运行:

echo "globals()" >> input.txt

回到第一个终端,你会看到输出。

链接地址: http://www.djcxy.com/p/62599.html

上一篇: Python: code.interact(local=locals()) where stdin/stdout are not available

下一篇: Build project periodically only if changes are found in the repository