javaから(linux)-subprocessへのデータの送信に問題があります。ProcessBuilder/Processです。Java Process/ProcessBuilderのOutputStreamにパイプとして書き込む
シェル専用の基本的な例は、次のようになり、正常に動作します。
echo "hello world" | cat - >/tmp/receive.dat
は今、私は内部的に新しいプロセス(cat - >/tmp/receive.dat
)を作成し、それにデータを送信すべきJavaプログラムでecho "hello world"
を置換したいです。
私は次のことを試してみましたが、ファイル/tmp/receive.dat
は手つかずのまま:
String[] cmdArray = { "/bin/cat", "-", ">/tmp/receive.dat" };
ProcessBuilder builder = new ProcessBuilder (cmdArray);
builder.directory (new File ("/tmp"));
Process p = builder.start();
OutputStream pos = p.getOutputStream();
byte [] bytes = "hello world".getBytes();
pos.write (bytes);
pos.close();
p.waitFor();
同じことが当然のようになっcmdArrayと、Windows環境で起こります
cmd /c type con >c:\tmp\receive.dat
印刷を直接から、System.outにjavaは、Javaプログラムのlivecycle内で呼び出されるべきである多くのサブプロセスを代替するものではありません。
thx助けてください! Tombo
変です!もちろん、出力のリダイレクトはシェルによって行われますが、ここにはシェルがありません> /tmp/receive.datがcatにパラメータとして送信されました...別の受信者コマンド(ghostscript)を使ってテストしました元気? –
ghostscript自体には、 "> file"を "ファイルに書き込む"と解釈する特別なロジックがあるかもしれませんが、catにはそのような機能はありません(常に単に標準出力に書き出します)。私はcatの逆であるコマンドを探していました(標準入力をパラメータとして指定されたファイルに書きます)が、そのようなことは見ませんでした。 – thewmo