【发布时间】:2012-06-27 00:33:15
【问题描述】:
我正在尝试观察一个过程并等待某种模式,比如:
open someFile id=123
然后,在那之后,我想等待
close id=123
我尝试编写脚本如下:
running_procs = [Popen(["process", "and", "options"], stdout=PIPE, stderr=PIPE)]
while running_procs:
for proc in running_procs:
retcode = proc.poll()
if retcode is not None: # Process finished.
running_procs.remove(proc)
break
else:
while True:
next_line = proc.stdout.readline()
if next_line == '' and proc.poll() != None:
break
m = re.search( r'someFile.*id\=([0-9]*)', next_line, re.M|re.I)
if m:
print m.group(1)
但它似乎执行得太慢了。关于处理管道中的大量线路有什么建议吗?有更快的方法吗?
【问题讨论】:
-
你试过分析它吗? python -m cProfile -s time myscript.py(如果我没记错的话)
-
当您声称它太慢时,您是说该过程正在快速产生输出但您的读取方法处理管道太慢了吗?
-
“太慢”是指这些行似乎在缓冲,而 python 处理它的速度似乎太慢了。最终成为实际情况的是,正如您在回答中指出的那样,缓冲区大小太高。将其设置为 1 解决了我的问题。
标签: python subprocess pipe popen