Python如何在子进程?

2024-09-25 00:27:36 发布

您现在位置:Python中文网/ 问答频道 /正文

上周我也发布了类似的question,这篇文章反映了我的审判和我现在面临的问题。在

通过Popen调用的程序是一个命令行程序。我使用一个线程从队列中读取一个项并将其发送到stdin并从stdout获取响应。但是它挂在proc.stdout.read()中。上周五,我确实看到了它与预期产量的良好配合,然后当我今天做了一些更改时,它挂起了。我所做的更改是将read()替换为readlines(),并使用一个循环来迭代结果。我知道readlines()可能会阻塞,但是当我上周五将代码反转到使用read()时,它也会阻塞。我现在完全迷路了。有什么原因吗?在

下面是从队列中获取一个句子并将其输入java程序以获得响应的代码:

''' below is the code for worker thread. '''
def readQueue(proc, queue):
    print 'enter queueThread.\n'
    global notEmpty
    notEmpty = True
    while notEmpty:
        try:
            sen = queue.get()
            proc.stdin.write(sen.strip())
            res = proc.stdout.read()
            print res.strip(), ' ', sen
            queue.task_done()
        except Empty:
            break
    print 'leave queueThread.'

下面的主线程是从文件中读取每一行,并将其放入队列中,以便工作线程逐项处理:

^{pr2}$

Tags: 代码程序read队列queuestdinstdoutproc
1条回答
网友
1楼 · 发布于 2024-09-25 00:27:36

子进程中的管道是类似文件的对象。在

这些对象上的方法read()会将所有内容读入内存,直到达到EOF为止。如果不指定应该读多少,请参阅doc:https://docs.python.org/2/library/stdtypes.html#file.read。在

如果你不想看到这样的行为,你必须设置你想读的大小。试着把它设置成1字节?在

readlines()也是如此,请参阅文档:https://docs.python.org/2/library/stdtypes.html#file.readlines

相关问题 更多 >