[英]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.