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.ini、dataset.enのコンテンツが翻訳され、に保存されout.txtます。しかし、ここでこのコードを実行している間、何out.txtも作成されません。コンソールには何も表示されませんが、出力をファイルに保存するコマンドを削除しました。私が変更 Process p = Runtime.getRuntime().exec(ls)した場合、正常に動作します。

4

1 に答える 1

0

シェルはリダイレクトと引数を解釈できます。代わりに試してみてください

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

プロセス process = Runtime.getRuntime().exec(cmd);

于 2012-05-21T16:01:59.830 に答える