2012-12-15 58 views
2

我正在写一个简单的包装器在python调试器(pdb)上,我需要解析pdb输出。但是从流程管道读取文本时遇到问题。我的代码阅读过程输出

实例:在OS壳

import subprocess, threading, time 

def readProcessOutput(process): 
    while not process.poll(): 
     print(process.stdout.readline()) 

process = subprocess.Popen('python -m pdb script.py', shell=True, universal_newlines=True, 
          stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE) 
read_thread = threading.Thread(target=readProcessOutput, args=(process,)) 
read_thread.start() 

while True: 
    time.sleep(0.5) 

当我执行给定的命令(蟒蛇-m PDB script.py)我得到的结果是这样的:

> c:\develop\script.py(1)<module>() 
-> print('hello, world!') 
(Pdb) 

但是当我运行我的脚本我只有两行,但无法获得pdb提示。在这之后将命令写入标准输入无效。所以我的问题是: 为什么我不能读第三行?我怎样才能避免这个问题,并得到正确的输出?

平台:Windows XP中,Python的3.3

+1

PDB采用模块化设计,可以延长。我认为你不需要这样包装它。你试图解决什么是最终的问题? – Keith

+0

我试图创建一个简单的扩展崇高的文本来帮我调试时。它不是功能丰富的,我认为解析输出会比扩展pdb容易得多。 – Victor

回答

2

第三行不能readline()读,因为它不是由行的末尾还没有结束。你通常在“(pdb)”后面看到光标,直到你写入任何内容+输入。

到具有一些提示过程的通信通常是更为复杂。这证明我还写数据写入一个独立的线程首先更容易测试的沟通,以确保如果使用过多试图写入或读取主线程永远不会冻结。然后它可以再次简化。

+0

非常感谢!我解决了我的问题。 – Victor