使用Java中的命令行工具进行通信

Eri*_*rik 5 java linux process

我想从我的Java程序中使用linux命令行工具.我启动程序并使用Process类(http://download.oracle.com/javase/6/docs/api/java/lang/Process.html)获取输出:

 /* @param args
  * @throws IOException 
  */
 public static void main(String[] args) throws IOException {
    Process proc = Runtime.getRuntime().exec("octave");

    BufferedReader reader = 
        new BufferedReader(new InputStreamReader(proc.getInputStream()));

    BufferedReader errorReader = 
        new BufferedReader(new InputStreamReader(proc.getInputStream()));

    BufferedWriter writer = 
        new BufferedWriter(new OutputStreamWriter(proc.getOutputStream()));

    int c;
    while((c = proc.getInputStream().read()) != -1) {
       System.out.print((char)c);
    }
    System.out.println("End");
 }
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

GNU Octave,版本3.0.5版权所有(C)2008 John W. Eaton等.这是免费软件; 查看复制条件的源代码.绝对无保证; 甚至不适用于适销性或特定用途的适用性.有关详细信息,请键入"保修".

Octave配置为"i486-pc-linux-gnu".

有关Octave的更多信息,请访问http://www.octave.org.

如果您发现此软件有用,请提供帮助.有关更多信息,请访问 http://www.octave.org/help-wanted.html

报告错误(但首先请阅读 http://www.octave.org/bugs.html以了解如何编写有用的报告).

有关以前版本更改的信息,请键入"news".

奇怪的是,如果我在终端中运行八度音程,则正常输出如下:

:〜/ workspace/Console/src/c $ octave
GNU Octave,版本3.0.5版权所有(C)2008 John W. Eaton等.这是免费软件; 查看复制条件的源代码.绝对无保证; 甚至不适用于适销性或特定用途的适用性.有关详细信息,请键入"保修".

Octave配置为"i486-pc-linux-gnu".

有关Octave的更多信息,请访问http://www.octave.org.

如果您发现此软件有用,请提供帮助.有关更多信息,请访问http://www.octave.org/help-wanted.html

报告错误(但首先请阅读 http://www.octave.org/bugs.html以了解如何编写有用的报告).

有关以前版本更改的信息,请键入"news".

八度:1>

因此,请求输入的行中的字符不会在我的输入流中发送.为什么?是否可以检测是否请求输入?

谢谢你的回答!

海因里希

Joa*_*uer 7

*nix上的程序可以检测它们是否正在与终端或其他流进行通信.许多交互式shell类型的程序基于此做出不同的反应(通过设置不同的提示,而不是读取一些init文件,甚至根本不启动).

您可能遇到其中一种情况.

此外,也许使用Java API进行八度音阶可能是更简单的方法:例如,joPAS.


Eri*_*rik 1

我终于可以解决这个问题了:在 Linux 下,将 Octave 与 --interactive 一起使用,最终使用 --no-line-editing 选项,它起作用了:)

海因里希