stdin在大量行之后阻塞

时间:2015-08-31 07:53:44

标签: java python subprocess

我有一个python进程和一个java进程。

import subprocess as p 

p.Popen(['java','jar', 'some jar'], stdin = p.PIPE, stdout = p.PIPE) 
#takes in data and repeat...
p.stdin.write('some string that is passed to the java jar \n')
p.stdin.flush() 
output = p.stdout.readline()

Java程序

While (True){
Scanner(System.in);
//do some processing 
System.out.println('processed');}

这适用于100行数据

但是,当我达到100多行时。 stdin似乎在等待输入。

我必须输入ctrl c强制结束该程序,异常的最后一行将在stdin.write(txt)。但是,我一直在冲洗缓冲区,所以我不明白是什么问题。我有大约1000行,如果我将它们分成10组100运行10次。它工作,但如果我一次运行1000行它将无法正常工作。这绝对不是数据问题。

这是对我的问题的跟进

Popen communicate vs Popen stdin.write()

场合

我有大量的文字文件。

这些将由python处理为单个字符串,然后传递给java引擎进行处理。

工作流程是这样的。

将文件读入python和进程。 将python的输出写入stdin。 从Java中的stdin读取。 在Java中输出到stdout。 回读python中的输入。

这适用于前100个文件,它将挂在第120个文件周围。

因此,解决方法是批量运行这些文件。

喜欢从0 -100和100 - 200运行它,依此类推。

但是,我希望循环从0到1000。

0 个答案:

没有答案