小编muc*_*ckl的帖子

python:读取线程中的子进程输出

我有一个可执行文件,我使用subprocess.Popen调用.然后,我打算通过stdin使用一个线程从stdin中提取一些数据,该线程从队列中读取其值,稍后将在另一个线程中填充.应该使用另一个线程中的stdout管道读取输出,并再次在队列中进行排序.

据我之前的研究所理解,使用带队列的线程是一种很好的做法.

遗憾的是,外部可执行文件不会快速给出每个管道输入的答案,因此简单的写入,读取线周期不是一个选项.可执行文件实现了一些内部多线程,我希望输出一旦可用,就要附加读者线程.

作为测试可执行文件的示例,只需对每行进行随机播放(shuffleline.py):

#!/usr/bin/python -u
import sys
from random import shuffle

for line in sys.stdin:
    line = line.strip()

    # shuffle line
    line = list(line)
    shuffle(line)
    line = "".join(line)

    sys.stdout.write("%s\n"%(line))
    sys.stdout.flush() # avoid buffers
Run Code Online (Sandbox Code Playgroud)

请注意,这已经尽可能没有缓冲.或者不是吗?这是我的精简测试程序:

#!/usr/bin/python -u
import sys
import Queue
import threading
import subprocess

class WriteThread(threading.Thread):
    def __init__(self, p_in, source_queue):
        threading.Thread.__init__(self)
        self.pipe = p_in
        self.source_queue = source_queue

    def run(self):
        while True:
            source = self.source_queue.get()
            print "writing to process: ", repr(source)
            self.pipe.write(source)
            self.pipe.flush()
            self.source_queue.task_done()

class ReadThread(threading.Thread):
    def __init__(self, p_out, target_queue): …
Run Code Online (Sandbox Code Playgroud)

python multithreading subprocess buffering

10
推荐指数
1
解决办法
6723
查看次数

标签 统计

buffering ×1

multithreading ×1

python ×1

subprocess ×1