【问题标题】:mozilla extension - reading stdout of external processMozilla 扩展 - 读取外部进程的标准输出
【发布时间】:2011-11-11 15:35:33
【问题描述】:

我正在尝试使用 Components.interfaces.nsIProcess 从 Thunderbird 扩展运行 dvipng 进程。我需要阅读该过程的标准输出,但我无法找到一种方法来做到这一点。我在nsIProcess2 上发现了一些线程,但那个(看起来)从未完全用标准输出实现。有什么建议吗?

【问题讨论】:

    标签: xpcom thunderbird thunderbird-addon


    【解决方案1】:

    nsIProcess2 是不相关的 - 它已实现,但后来合并到 nsIProcess。它只是关于异步启动进程。

    相关的错误是bug 484246bug 68702。后者已得到解决,但到目前为止,默认情况下,Firefox/Thunderbird 不附带代码(Firefox 和 Thunderbird 都不需要这些代码)。所以你的选择是:

    • 自己构建 IPCModule 并将其作为扩展的一部分 - 不推荐,因为它会导致 lots of troubles
    • 创建一个将为您调用 dvipng 的本机库,通过 js-ctypes 使用它 - 应该是最简单的解决方案。
    • dvipng 转为库并通过 js-ctypes 直接使用它 - 可能也不会太难,这也会为您提供更好的性能。

    【讨论】:

    • 我想构建一个尽可能跨平台的 Thunderbird 扩展,而不需要构建额外的库。我是否理解正确,在 javascript 本身中(我是这种语言的新手,抱歉),在读取其标准输出或至少将其标准输出重定向到文件时无法调用进程?
    • 是的,不幸的是,这是真的。您可以通过使用正确的参数调用命令行 shell 来获得“将输出重定向到文件”部分。
    • 鉴于您所说,用 python 编写扩展程序有多现实(否则我选择的语言)?我知道有PythonExt,但我无法用谷歌搜索一个用 python 编码的真正扩展。
    • 我建议忘记它。 PyXPCOM 大部分都被废弃了,并且将它与您的扩展一起发布很麻烦。
    • 我认为最简单的方法是让 javascript 输出 shell 脚本(包括所有输出重定向等,并将所需的内容写入输出文件)并使用 nsIProcess 运行它。仅限 Linux,但……现在已经足够了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多