繁体   English   中英

Python 与 java 程序的通信不回显输入

[英]Python communication with java program does not echo inputs

Python 与 java 程序通信:

Java程序

Sample.java    
import java.util.Scanner; // Import the Scanner class
    
    class Sample {
      public static void main(String[] args) {
        int x, y, sum;
        Scanner myObj = new Scanner(System.in); // Create a Scanner object
        System.out.println("Type a number:");
        x = myObj.nextInt(); // Read user input
        System.out.println("Type another number:");
        y = myObj.nextInt(); // Read user input
    
        sum = x + y;  // Calculate the sum of x + y
        System.out.println("Sum is: " + sum); // Print the sum
      }
    }

Python 程序:

import subprocess;
p = subprocess.Popen(['timeout' ,'2', 'javac', 'Sample.java'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p = subprocess.Popen(['timeout' ,'1', 'java', 'Sample'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
stdout,stderr = p.communicate(b"5\n6\n")
p.stdin.close()
print(stdout.decode("utf-8"))

当我执行 python 程序时,我得到以下结果

Type a number:
Type another number:
Sum is: 11

预期的结果是

Type a number:5
Type another number:6
Sum is: 11

任何建议表示赞赏。

你在这里所做的,基本上与从 shell 运行 pipe 相同。 例如,当你跑步时,

sort somefile | uniq

uniq 读取的排序数据不会得到回显,或者,甚至更简单,

./someprogram <file

不回显文件的内容(除非someprogram明确将其发送到标准输出)。 发生什么了?

从标准输入读取时不会发生回声,它发生在终端设备驱动程序中。

在您的示例中,没有涉及终端,因此没有回声。 如果您希望发送到子进程的数据也显示在标准输出上,则必须将其显式写入标准输出。

下面的代码应该像您尝试从 python 通信时一样工作,您正在发送 arguments,以便将它们打印在 output 上,您必须记录它们

import java.util.Scanner;

public class App {
      public static void main(String[] args) {
        int x, y, sum;
        Scanner myObj = new Scanner(System.in); // Create a Scanner object
        System.out.println("Type a number:");
        x = myObj.nextInt(); // Read user input
        System.out.println(x);
        System.out.println("Type another number:");
        y = myObj.nextInt(); // Read user input
        System.out.println(y);
    
        sum = x + y;  // Calculate the sum of x + y
        System.out.println("Sum is: " + sum); // Print the sum
      }
}

输出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM