2011-03-04 85 views
0

我正在運行一個腳本nsIProcess.run(),我發現獲得輸出的唯一方法是將輸出寫入文件,然後從JavaScript中讀取文件。在Xulrunner中獲取腳本輸出(shell腳本)的最佳方式是什麼?

但由於某些原因,當我從xulrunner應用程序執行它時,它不會生成帶有輸出的文件。這裏是我的功能:

function runProcess() { 
    // create an nsILocalFile for the executable 
    var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces["nsILocalFile"]); 
    file.initWithPath("/home/me/my-script.sh"); 

    write("FILE EXISTS = " + file.exists()); // it is printing TRUE, good! 


    // create an nsIProcess 
    var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); 
    process.init(file); 

    // Run the process. 
    // If first param is true, calling thread will be blocked until 
    // called process terminates. 
    // Second and third params are used to pass command-line arguments 
    // to the process. 
    process.run(true, [], 0); 
} 

my-script.sh:

echo ok > /tmp/result.txt 

有沒有更好的(和工作)的方式來得到my-script.sh這個 「OK」 輸出?

--update

我在Ubuntu 10.04使用的XULrunner 1.9.2.15

+0

嘗試在您的shell腳本中使用絕對路徑。它的當前目錄可能不是你想象的那樣。 – 2011-03-04 16:40:02

+0

那麼腳本是否被執行,但是文件沒有被寫入,或者腳本沒有被執行?可以確認它確實以某種方式運行? – pc1oad1etter 2011-03-04 17:57:29

+0

@丹尼斯威廉姆森好點。不幸的是,它仍然沒有創建文件。 – 2011-03-04 18:01:03

回答

0

這裏有一個第三方 「IPC」 庫例如使用通過Enigmail,您可以捕獲命令的輸出。它甚至有可能成爲XULrunner的一部分。

編輯:正如評論中所述,nsIProcess.run使用exec而不是系統,因此腳本需要#!以便內核可以產生shell。

+0

是的,我開始認爲這是唯一的方法.. – 2011-03-10 13:46:22

+0

但是,真的看起來像腳本甚至沒有運行..任何想法爲什麼? – 2011-03-10 15:13:39

+0

你有沒有嘗試在你的腳本中放一個睡眠,讓自己有機會看它運行? – Neil 2011-03-11 00:34:35

0

從上面的討論中,聽起來好像這個過程可能不會被啓動。

我將要做兩件事情

  • 嘗試調用其他進程/可執行
  • 變空爲[],也許它被悄悄地失敗的,希望這是一個數組(即使是空的array)
+0

我已經爲'']更改了'null',但沒有更改。我不知道是否通過調用'process.init(「firefox」);'它應該啓動Firefox,但也沒有發生。通過調用其他'.sh'文件也不起作用。 – 2011-03-11 12:43:01

相關問題