我一直在試圖讓ruby腳本通過Java運行的真正問題。我已經提出了各種解決方案,並且由於某種原因它們都失敗了,所以我試圖簡化我的問題。從shell/Terminal調用腳本並使用Java進程有什麼區別?
比方說,我有一個shell腳本,只是有這一行是:
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腳本回來,具體地講,但是這是一個誤導,因爲它是真正下到腳本本身沒有按預期工作)。我的問題不是爲什麼這個test_s2t.rb
腳本不起作用,因爲我認爲這可能會讓我從真正的問題中分心。
我的問題很簡單當我通過ProcessBuilder運行某些東西而不是通過命令行運行時,有什麼不同。這是一個權限的東西嗎?路徑差異?腳本運行的環境必須有一些東西,因爲我看不到腳本本身的問題。
作爲alwyas,任何建議表示讚賞。三天指望這個問題...
編輯 - 對於那些好奇,我收到的Java確切的錯誤是在這個問題的底部描述的:Java receives an error executing Ruby script; Terminal doesn't
我們在這個問題得到的結果是我應該嘗試JRuby,但是這導致了更多的問題,因爲我無法在JRuby中正確使用這些寶石。所以我回過頭來問自己爲什麼它不會正常運行。
我認爲錯誤是一個分心的原因是因爲錯誤是由於它處理了一個字符串,它不期望看到。它期望的字符串是腳本運行的正常進程,它使用ffmpeg和suchlike。這意味着腳本遇到了另一個錯誤(它沒有顯示,這意味着它可能不是由ruby/jruby引起的,而是由腳本啓動的過程如ffmpeg引起的)。
這令人難以置信的令人沮喪,純粹是因爲它從命令行運行得非常完美。
雖然這可能會讓您對真實問題感到分心,但您從腳本中獲得的錯誤是什麼? ProcessBuilder在自己的*相同*環境中執行進程 – ArjunShankar 2012-03-28 14:04:32
我將在錯誤和一些解釋中進行編輯。完成。 – mtrc 2012-03-28 14:21:30