私はRubyスクリプトをJavaで実行しようとすると実際の問題を抱えています。私はあらゆる種類のソリューションを提案しており、何らかの理由でそれらのすべてが失敗しているので、問題を単純化しようとしています。シェル/ターミナルからのスクリプトの呼び出しとJavaプロセスの使用の違いは何ですか?
のは、私はそれでこのラインを持っているシェルスクリプトがあるとしましょう:端末で
ruby -rubygems script/test_s2t.rb
を、私はscript/runruby.sh
を使用して、このスクリプトを実行することができますし、期待どおりに動作します。今度は、私は次のことを行いJavaメソッドを持っているとしましょう:
String[] cmd = {"script/runruby.sh"};
ProcessBuilder builder = new ProcessBuilder(cmd);
builder.redirectErrorStream(true);
Process process = builder.start();
これは(それは具体的には、バックRubyスクリプトからエラーがスローされますが、それは本当にダウンスクリプトにだから、これがmisdirectでは動作しません。それ自体は期待通りに動作しません)。なぜ私は実際の問題から私を邪魔していると思うので、私の質問は、test_s2t.rb
スクリプトが動作しない理由ではありません。
私の質問は単純にです。コマンドラインで実行するのではなく、ProcessBuilderで何かを実行すると何が違うのですか?それは許可のものですか?パスの違い?スクリプト自体に問題は見られないので、スクリプトが実行されている環境に何か不具合があるはずです。
alwyasとして、どんな提案もありがたいです。三日、この問題を頼りに...
EDIT - 好奇心のために、私はJavaで受け取る正確なエラーがこの質問の下部に説明したものです:Java receives an error executing Ruby script; Terminal doesn't
我々はその質問に入った結果私はJRubyを試してみるべきだったが、それはJRuby内で宝石を正しく動作させることができないので、さらなる問題を引き起こした。だから私はなぜそれが最初に正常に動作しないのか自分に尋ねることに戻りました。
私はエラーが気になると思うのは、見逃すと思われる文字列を処理したためにエラーが発生したためです。予想される文字列は、ffmpegなどを使用しているスクリプトが実行する通常のプロセスです。これは、スクリプトに別のエラーが発生したことを示しています(これは表示されていません。つまり、おそらくruby/jrubyによって引き起こされたのではなく、スクリプトがffmpegのように起動するプロセスによるものです)。
これは非常にイライラしています。純粋にコマンドラインから完全に実行されるからです。
実際の問題から気を散らしているかもしれませんが、スクリプトから得られるエラーは何ですか? ProcessBuilderはそれ自身と同じ*環境のプロセスを実行します – ArjunShankar
私はエラーといくつかの説明を編集します。完了しました。 – mtrc