L'Isola di Niente
L'Isola di Niente » Gjs Tips » GSubprocess

GSubprocess

# 最終更新日 2017.02.05

コマンド出力を得る(バイナリ)
#!/usr/bin/gjs

/*
 * g_spawn_command_line_sync
 * では文字列出力しか得ることができませんが
 * こちらはバイナリ出力も対応しています
 * python の subprocess と同様
**/

const Gio = imports.gi.Gio;
const GdkPixbuf = imports.gi.GdkPixbuf;

/* 何故かコレだとエラーになる (GNOME 3.22)
let sp = new Gio.Subprocess({
    argv: ["ls", "-a"],
    flags: Gio.SubprocessFlags.STDOUT_PIPE
}); */

// argv は array で渡す
let sp = Gio.Subprocess.new(["ls", "-l"], Gio.SubprocessFlags.STDOUT_PIPE);
let istream = sp.get_stdout_pipe();
let dstream = Gio.DataInputStream.new(istream);
for (;;) {
    let [s, l] = dstream.read_line_utf8(null);
    if (s == null) break;
    print(s);
}

// JPEG 画像のバイナリを取得し PNG 変換の例
sp = Gio.Subprocess.new(["cat", "可愛い苗ちゃん.jpg"], Gio.SubprocessFlags.STDOUT_PIPE);
istream = sp.get_stdout_pipe();
let p = GdkPixbuf.Pixbuf.new_from_stream(istream, null);
p.savev("愛しい苗ちゃん.png", "png", ["compression"], ["9"]);

Copyright(C) sasakima-nao All rights reserved 2002 --- 2017.