【发布时间】:2019-08-20 11:53:30
【问题描述】:
我有一个 python 脚本,它下载一个文本文件,逐行读取它并将读取的行发送到 java。我需要将此操作限制为 5 秒,并接收 python 读取的任何内容。
为了测试一切是否正常,我尝试了这个:
import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.concurrent.TimeUnit;
class ProcessTest {
public static void main(String args[]) {
try {
File file = new File("/home/local/seconds.py");
BufferedReader reader = new BufferedReader(new FileReader(file));
String testCase = "", temp = "";
while ((temp = reader.readLine()) != null) {
testCase = testCase.concat(temp + '\n');
}
reader.close();
ProcessBuilder pb = new ProcessBuilder("python", "-c", testCase);
Process p = pb.start();
if (!p.waitFor(5, TimeUnit.SECONDS)) {
reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((temp = reader.readLine()) != null) {
System.out.println(temp);
}
p.destroy();
System.out.println("not ended");
} else {
System.out.println("ended");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
seconds.py 文件
from time import sleep
for i in range(1,11):
print(i)
sleep(1)
预期结果:
由于我已将进程 waitFor 的值指定为 5 秒,因此代码最多只能打印 5 秒。
得到的结果: 代码执行超过 5 秒,最多打印 10 秒。
如何设置进程的超时时间并打印缓冲区中的内容?
【问题讨论】:
标签: java python process processbuilder