Javascript Gnome外壳扩展:GLib.IOChannel的标准输出

Javascript Gnome外壳扩展:GLib.IOChannel的标准输出,javascript,gnome-3,gnome-shell,Javascript,Gnome 3,Gnome Shell,所以我在做一个Gnome外壳扩展。我希望能够运行一些命令。(该命令实际上是“synclient-m100”,但这与主题无关) 到目前为止,我所做的是 s=GLib.spawn_async_with_pipes(null, ["synclient","-m","100"], null, GLib.SpawnFlags.SEARCH_PATH,null) c=GLib.IOChannel.unix_new(s[3]) 第一行生成我的进程。它确实在起作用 s[3]是进程的健壮性的文件描述符。(这与管

所以我在做一个Gnome外壳扩展。我希望能够运行一些命令。(该命令实际上是“synclient-m100”,但这与主题无关)

到目前为止,我所做的是

s=GLib.spawn_async_with_pipes(null, ["synclient","-m","100"], null, GLib.SpawnFlags.SEARCH_PATH,null)
c=GLib.IOChannel.unix_new(s[3])
第一行生成我的进程。它确实在起作用

s[3]是进程的健壮性的文件描述符。(这与管道有关。对整个管道的事情不太确定。)

无论如何,我的问题是,我似乎无法从synclient的输出中读取任何内容

是我用来参考的,但似乎不是所有的函数都能工作。例如,我想使用add_watch,但这显然不适用于gnome扩展

我尝试过使用bunch或read函数,特别是read_line_string,但它们都有问题。对于read_line_string,除了我不知道如何创建一个StringBuilder对象作为参数传递之外,它似乎应该都能工作

那么,有人知道如何获得命令的输出吗

编辑:而且我对扩展使用哪种语言有点困惑。我认为这是javascript,但我使用的文档似乎让我想到了Vala,不管是什么(我猜是java的一种变体?)

编辑2:

所以,我现在得到的是

let [res, pid, in_fd, out_fd, err_fd] = 
  GLib.spawn_async_with_pipes(
    null, ["synclient","-m","100"], null, GLib.SpawnFlags.SEARCH_PATH, null);
out_reader = new Gio.DataInputStream({ base_stream: new Gio.UnixInputStream({fd: out_fd}) });
读一行:

let [out, size] = out_reader.read_line(null);

这为我提供了命令的输出,但无论何时更改DataInputStream,它仍然无法让我获得一些回调。只要流中有新行,我就需要能够做一些事情。

Gnome外壳扩展通常是用JavaScript编写的。它们使用JavaScript绑定到用C编写的GLib之类的库。这些库也有Vala绑定,这就是您正在查看的文档。是JS绑定的文档,目前还不是官方的

StringBuilder
是一种Vala语言功能,对应于JS中的
GLib.String


你怎么知道
add_watch()
不起作用?你期望得到什么?它能做什么?

这个链接帮助很大
add_watch()
不起作用,因为它说它未定义,但可能是我做错了。无论如何,我用了一种稍微不同的方式,请看我问题的编辑。你可能应该为此打开一个新问题。