什么';在Xulrunner中获取脚本(shell脚本)输出的最佳方法是什么?

什么';在Xulrunner中获取脚本(shell脚本)输出的最佳方法是什么?,shell,xul,xulrunner,Shell,Xul,Xulrunner,我正在用运行一个脚本,我发现获取输出的唯一方法是将输出写入一个文件,然后从javascript读取该文件 但由于某些原因,当我从xulrunner应用程序执行它时,它不会生成带有输出的文件。以下是我的功能: function runProcess() { // create an nsILocalFile for the executable var file = Components.classes["@mozilla.org/file/local;1"].createInst

我正在用运行一个脚本,我发现获取输出的唯一方法是将输出写入一个文件,然后从javascript读取该文件

但由于某些原因,当我从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);
}
我的脚本。sh:

echo ok > /tmp/result.txt
是否有更好的(且有效的)方法从my-script.sh获得“ok”输出

--更新

我使用的是Ubuntu10.04和Xulrunner 1.9.2.15,有一个第三方的“ipc”库,例如Enigmail,它允许您捕获命令的输出。它甚至可能在某个时候成为XULrunner的一部分


编辑:如注释中所述,nsIProcess.run使用exec而不是system,因此脚本需要有一个#!这样内核就可以生成shell了。

从上面的讨论来看,这个过程似乎根本没有启动

我会尝试两件事

  • 尝试调用其他进程/可执行文件
  • 将null更改为[],可能是静默失败,希望这是一个数组(即使它是一个空数组)

尝试在shell脚本中使用绝对路径。它的当前目录可能不是您所认为的。脚本是否正在执行,但文件是否未写入,或者脚本是否未执行?丹尼斯·威廉姆森说:“你能证实它确实以某种方式运行吗?”。不幸的是,它仍然没有创建文件。@pc1oad1tter实际上,由于它没有打开一个终端供我查看,我不能确定它是否正在执行。。但是,现在你说,可能它甚至没有执行,javascript函数可能有问题..你能看看你的进程列表,看看它是否在那里启动吗?但是,看起来脚本甚至没有运行。。你知道为什么吗?你有没有试着在脚本中加入睡眠,让自己有机会观看它的运行?@Neil我将睡眠时间设置为10秒,由于我不知道进程的名称,我将其命名为启动10个进程,但我没有注意到进程管理器中的任何新功能。要么10秒后没有进程关闭。@Tom Brito好的,最后一个猜测:你试过用#开始你的脚本吗/bin/sh(或它需要的任何外壳)行和chmod+x?您最后的猜测是正确的。A
#/bin/bash
line解决了这个问题。谢谢我已经为
[]
更改了
null
,但没有任何更改。我不确定是否通过调用
process.init(“firefox”)
本来应该启动firefox,但也没有发生任何事情。通过调用其他
.sh
文件也无法工作。