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