与另一进程的stdin通信时出现意外结果

2024-10-02 10:30:33 发布

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

我的项目目录有下面3个文件

rndbet/rndbet.py

while True:
    s = input()
    if s == "exit":
        exit()
    else:
        print("I'm rndbet: " + s)

rndbet/开始

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
    }
}

当我直接从命令行键入bash -c "cd rndbet&&./start"时,会发生以下情况

$ bash -c "cd rndbet&&./start"
hi
I'm rndbet: hi
exit

但是运行java程序的行为不同

$ java mjhd
hi
<- rndbet: I'm rndbet: hi
exit
<- rndbet: I'm rndbet: exit
exit
<- rndbet: I'm rndbet: exit

因此,现在Python脚本无法正确获取exit命令。请帮我解决这个问题


我刚刚发现一个问题,即当Python脚本通过Java运行时,在发送的文本末尾总是附加一个额外的ASCII值为13的字符。可能的解决方案是什么


Tags: inbashnewexitcdjavapublichi

热门问题