1

ここのチュートリアルで与えられているように、このコマンドを使用してい ますhttp://www.statmt.org/moses/?n=Moses.Baseline

echo 'T W O N E I G H T' | /home/saj/g2p/mosesdecoder-master/bin/moses -f /home/saj/g2p/working/binarised-model/moses.ini

正常に動作していますが、echoコマンドなしで実行する必要があります。このコマンドをJAVA(Eclipse)で実行したかったのですが、連結に問題があります。平

      Process p = r.exec("echo '/home/saj/' | ls");

また、実行されていません。lsのような単純なコマンドですが、pwdは正しく機能しています。

私はこれらのことを試しましたが、どれも機能していません。

/home/saj/g2p/mosesdecoder-master/bin/moses -f /home/saj/g2p/working/binarised-model/moses.ini'TWONEIGH T'

/home/saj/g2p/mosesdecoder-master/bin/moses -f /home/saj/g2p/working/binarised-model/moses.ini TWONEIGHT

/home/saj/g2p/mosesdecoder-master/bin/moses'TWONEIGH T'-f /home/saj/g2p/working/binarised-model/moses.ini

/home/saj/g2p/mosesdecoder-master/bin/moses TWONEIGHT -f /home/saj/g2p/working/binarised-model/moses.ini

エコーなしで実行する正しいコマンドを提案してください。

4

1 に答える 1

0

引数にはスペースが含まれているため、組み込みのトークン化に依存することはできません。これを回避するには、exec(String[])ではなくを使用しますexec(String)。たとえば、このコマンドの場合:

/home/saj/g2p/mosesdecoder-master/bin/moses -f \
    /home/saj/g2p/working/binarised-model/moses.ini 'T W O N E I G H T'

あなたはこれをするでしょう:

String args[] = new String[] {
    "/home/saj/g2p/mosesdecoder-master/bin/moses",
    "-f",
    "/home/saj/g2p/working/binarised-model/moses.ini",
    "T W O N E I G H T" };
Process p = r.exec(args);

また、配管とリダイレクトに関しては、これらはシェルによって処理されることに注意してください。Javaなどからコマンドラインecho '/home/saj/' | lsを実行するには、シェルを実行し、これを引数としてシェルに渡す必要があります。例えば:

String args[] = new String[] { "/bin/sh", "-c", "echo '/home/saj/' | ls" };
Process p = r.exec(args);
于 2012-12-10T07:57:39.337 に答える