Java 与另一进程通信时出现意外结果';s标准
我的项目目录包含以下3个文件 rndbet/rndbet.pyJava 与另一进程通信时出现意外结果';s标准,java,python,bash,pipe,ipc,Java,Python,Bash,Pipe,Ipc,我的项目目录包含以下3个文件 rndbet/rndbet.py while True: s = input() if s == "exit": exit() else: print("I'm rndbet: " + s) rndbet/start python3 rndbet.py mjhd.java import java.io.PrintStream; import java.util.Scanner; public class
while True:
s = input()
if s == "exit":
exit()
else:
print("I'm rndbet: " + s)
rndbet/start
python3 rndbet.py
mjhd.java
import java.io.PrintStream;
import java.util.Scanner;
public class mjhd {
public static void main(String[] args) throws Exception {
Process process = new ProcessBuilder("bash", "-c", "cd rndbet&&./start").start();
new Thread(new Runnable() {
@Override
public void run() {
Scanner in = new Scanner(process.getInputStream());
while (in.hasNextLine()) {
System.out.println("<- rndbet: " + in.nextLine());
}
}
}).start();
Scanner in = new Scanner(System.in);
PrintStream out = new PrintStream(process.getOutputStream(), true);
while (true) {
out.println(in.nextLine());
} //this part is actually broken; it shouldn't be an infinite loop
//just for testing
}
}
但是运行java程序的行为不同
$ java mjhd
hi
<- rndbet: I'm rndbet: hi
exit
<- rndbet: I'm rndbet: exit
exit
<- rndbet: I'm rndbet: exit
$javamjhd
你好
好吧,我找到了一个简单的答案
更改out.println(in.nextLine())
toout.print(in.nextLine()+'\n')
有效。问题在于PrintStream
和匿名线程正在运行,因此输出混乱。你为什么不把你的PrintStream
放到匿名线程中
打印出来?@haifzhanPrintStream
不会打印出我代码中的任何内容;它相当于“发送”。
$ java mjhd
hi
<- rndbet: I'm rndbet: hi
exit
<- rndbet: I'm rndbet: exit
exit
<- rndbet: I'm rndbet: exit