【发布时间】:2016-10-03 11:18:18
【问题描述】:
我的 python 代码在一个真正的循环中在 java 中打印,但如果我进入睡眠状态则不会打印,即使在睡眠持续时间之后,java 中也没有输出
print 33
import time
while True:
i = 0
time.sleep(0.01)
j = 0
print 1
这是python代码。我从 java 代码运行它
public class DistanceHandler extends Thread
{
private Process p;
private ProcessBuilder pb;
private BufferedReader bfr;
public DistanceHandler()
{
try{
/*pb = new ProcessBuilder("python", "/home/pi/Distance.py");
pb.redirectErrorStream(true);
pb.
p = pb.start();
bfr = new BufferedReader(new InputStreamReader(p.getInputStream()));*/
p = Runtime.getRuntime().exec("sudo python /home/pi/test.py -u");
bfr = new BufferedReader(new InputStreamReader(p.getInputStream()));
} catch (Exception e) {
System.out.println(e);
}
}
public void run(){
System.out.println("Start read");
if(p != null) {
System.out.println("P alive: " + p.isAlive());
int line = 0;
try {
while ((line = bfr.read()) != -1) {
//display each output line form python script
System.out.println((char)line);
if(line < 10){
System.out.println("Pop that Ballooon ");
}
}
} catch (Exception e) {
System.out.println(e);
}
}
}
}
【问题讨论】:
-
在 print 语句后添加
sys.stdout.flush()也无济于事? -
谢谢,这解决了它
-
作为解释:输出流被缓冲,即
print仅在缓冲区已满或显式刷新流时才导致实际输出。对于小块输出,您的数据永远不会离开 python 进程,它会保留在流缓冲区中。 流的常见问题下的文件 -
但是为什么你不睡觉的时候它会起作用呢?
-
它也适用于睡眠,但需要更长的时间。当缓冲区第一次满时,您会得到输出。如果没有睡眠,您将非常快速地填充缓冲区。随着睡眠,填充缓冲区需要更多时间。