【问题标题】:Open an independent terminal window and run command with Java打开一个独立的终端窗口并用Java运行命令
【发布时间】:2013-12-11 11:35:28
【问题描述】:

基本上,我正在尝试打开一个终端窗口并命令它启动一个 php 脚本。
当脚本向终端输出新行时,也能够立即输入和获取输出。如果可能的话,我打算让它hidden

更像是将终端的输出和输入镜像到 java 应用程序本身

我做到了

Runtime.getRuntime().exec("/usr/bin/open -a Terminal ~/Desktop/test.php"); //mac

我不知道如何在 php 脚本向终端发送输出后立即输入和获取输出。

请帮帮我

【问题讨论】:

  • 一般提示:1) 阅读(并实施)所有When Runtime.exec() won't 的建议。那可能会解决问题。如果没有,它应该提供更多关于失败原因的信息。然后忽略它引用exec 并使用ProcessBuilder 构建Process。还将String arg 分解为String[] args 以说明本身包含空格的参数。 2) 提出问题。
  • @AndrewThompson 如果脚本要求更多输入,我该怎么做?
  • 不确定那个,但是看看Process提供的I/O流。

标签: java macos terminal runtime


【解决方案1】:

创建进程并读取进程的输入流。

(javadoc) getInputStream()

获取子进程的输入流。流从这个 Process 对象表示的进程的标准输出流中获取数据。

//-->check command line<--
Process process = Runtime.getRuntime().exec("/usr/bin/php /home/amit/hello.php");
BufferedInputStream iStream = new BufferedInputStream(process.getInputStream());
BufferedOutputStream oStream = new BufferedOutputStream(process.getOutputStream());

byte[] buffer = new byte[1024];
while (true){
   int length = iStream.read(buffer);
   if(length == -1)
      break;
   System.out.println(new String(buffer, 0, length));
}

注意:写的是关于Linux的。

【讨论】:

  • 我试过System.out.println(stream.read());,但是除了脚本运行之外,原始终端上没有打印任何内容?
  • 您应该使用ProcessBuilder,而不是 Runtime.exec。请参阅 Andrew Thomson 对问题的评论以查看为什么不使用 Runtime.exec 的链接。
【解决方案2】:

而不是在终端中执行php脚本,而后者又使用php来执行脚本,只需在php中执行php脚本并捕获输入/输出。

$ which php
/usr/bin/php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2021-10-22
    • 1970-01-01
    • 2013-12-25
    • 2018-02-03
    • 1970-01-01
    相关资源
    最近更新 更多