1
public static void main(String[] args) throws Exception {
  System.setOut(new PrintStream(
      new FileOutputStream("/home/main/smt/output/out.txt")));

  try {
    String line;
    Process p = Runtime.getRuntime().exec(
        "/home/main/smt/tools/moses-2010-08-13/moses/moses-cmd/src/moses " +
        "-f /home/main/smt/work/model/moses.ini " +
        "< /home/main/smt/work/corpus/dataset.en" );

    BufferedReader in = new BufferedReader(
                   new InputStreamReader(p.getInputStream()) );
    while ((line = in.readLine()) != null) {
      System.out.println(line);
    }
    in.close();
  }
  catch (Exception e) {
    // ...
  }
}

命令

home/main/smt/tools/moses-2010-08-13/moses/moses-cmd/src/moses 
  -f /home/main/smt/work/model/moses.ini
  < /home/main/smt/work/corpus/dataset.en
  >/home/main/smt/output/out.txt

在 Linux 的终端中执行并out.txt创建。但是在java中没有out.txt创建。

dataset.en是输入文件。src使用模型中和模型中的exe moses,moses.inidataset.en 中的内容被翻译并保存在out.txt. 但是在这里运行此代码时不会out.txt创建。尽管控制台中没有显示任何内容,但我从命令中删除了将输出保存在文件中。如果我改变 Process p = Runtime.getRuntime().exec(ls)它的工作正常。

4

1 回答 1

0

Shell 可以解释重定向和参数。你应该尝试

String[] cmd = {"/bin/ksh", "-c", "yourcommand < infile"};

进程进程 = Runtime.getRuntime().exec(cmd);

于 2012-05-21T16:01:59.830 回答