当前位置: 首页 > 知识库问答 >
问题:

java模拟用户对外部程序输入

宇文航
2023-03-14

我需要使用Python程序来计算一些东西并得到结果。这个Python程序需要一个很长的输入,所以我无法在调用该Python程序时将其作为参数传递。

这个问题我就简化一下。下面是一个等待用户输入并打印用户输入的Python程序。我想用Java来完成输入并得到Python程序打印的结果。

print("Waiting for user input")
result = input()
print(result)

我尝试使用BufferedWriterDataOutpuStream来编写字符串,但两者似乎都不起作用。

这是我尝试到目前为止从Java进程与输入/输出流学习的代码:。

public void callExe() throws IOException {
    Process process = new ProcessBuilder("python", "C:/input.py").start();

//  BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
    DataOutputStream writer2 = new DataOutputStream(process.getOutputStream());
    BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));

    BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));

//  writer.write("5555555");
    writer2.writeBytes("5555");
    writer2.flush();

    // Read the output from the command:
    String s = null;
    while ((s = stdInput.readLine()) != null)
        System.out.println(s);

    // Read any errors from the attempted command:
    System.out.println("Here is the standard error of the command (if any):\n");
    while ((s = stdError.readLine()) != null)
        System.out.println(s);
}

-回答-

感谢Jurn Ho,除此之外,我还注意到\nwriter.flush()都是需要的。

共有1个答案

艾善
2023-03-14

您必须编写换行符\n,否则不会读取python的输入。就像用户从不按回车键一样。

 类似资料:
  • 问题内容: 我想从Java应用程序启动外部第三方应用程序。我的Java应用程序运行时,此外部应用程序应始终运行。 从时间到时间(这取决于用户交互)我的Java应用程序应该能够通过阅读和写这个外部应用程序和。 我怎样才能做到这一点? 问题答案: 是前应用程序本机代码还是其他Java程序?如果是本机代码,请查看http://download.oracle.com/javase/1.5.0/docs/a

  • 外部化相对于序列化的主要优点是外部化仅保留对象的一部分,而不是序列化时保留整个对象。但我认为,如果我们不调用可序列化类的 writeObject() 方法中的 ObjectOutputStream 的 defaultWriteObject() 方法,我们可以通过自定义序列化来模拟外部化。因此,无需调用 defaultWriteObject() 方法,只在 writeObject() 方法中保留可序

  • 问题内容: 我试图制作一个调用外部程序的应用程序,我必须传递两个参数。它没有任何错误。用c ++编写的program.exe可以拍照并修改txt文件的内容。Java程序可以运行,但是什么也没做 这是我的示例代码 问题答案: 从这里可耻地借来的

  • 问题内容: 我正在尝试为需要用户输入的方法创建一些JUnit测试。被测方法看起来类似于以下方法: 有没有一种方法可以自动将程序传递给int而不是我或其他人在JUnit测试方法中手动执行此操作?像模拟用户输入一样? 提前致谢。 问题答案: 你可以通过调用来用自己的流替换可以是一个字节数组: 通过将IN和OUT作为参数传递,不同的方法可以使此方法更具可测试性:

  • 问题内容: 我正在编写一个简单的猜谜游戏程序,用户将输入一个数字来尝试猜测一个随机生成的数字。 如果他们的号码正确,我想给他们选择再次玩的机会。 这是我的代码: 游戏进行完毕,但是提示用户再次玩游戏时,什么都没有发生? 有什么建议? 问题答案: 这是完整的代码,完全可以使用并经过测试。

  • 在 Perl 中有三种方式来调用外部程序。 system() 返回程序的退出状态 my $rc = system("/bin/cp $file1 $file2"); # returns exit status values die "system() failed with status $rc" unless $rc == 0; 如果可能,用列表传递你的参数,而不是用单个的字符串。 my $r