全体的に内容が古くなった Tips ページの更新を昨年末から地味に。
次は我がサイトの最大コンテンツである PyGObject のページ。
blog ではやったけどまとめていない GIOChannel, GSubprocess, GRegex 等々。
ただ Gjs でやってるのよね、メイン言語が今は JavaScript ですし。
書き換えするより Gjs の新規ページを作ったほうがいいかなと。
まあどちらでも基本的には変わらないし。
と思っていたけど…
GNOME 3.22 時の記事です、GIOChannel でファイルの読み書きを。
Gjs
#!/usr/bin/gjs
 
const GLib = imports.gi.GLib;
 
let s = "abcdefg\nあいうえお\n3行目";
 
let channel = GLib.IOChannel.new_file("output_js.txt", "w");
channel.write_chars(s, -1);
channel.shutdown(true);
 
let channel2 = GLib.IOChannel.new_file("output_js.txt", "r");
let [status, str_return] = channel2.read_to_end();
print(str_return);
channel2.shutdown(true);
PyGObject
#!/usr/bin/env python3
from gi.repository import GLib
s = "abcdefg\nあいうえお\n3行目"
channel = GLib.IOChannel.new_file("output_py.txt", "w")
#channel.write_chars(s, -1) # TypeError: Item 0: Must be number, not str
channel.write(s) # deprecated
channel.shutdown(True)
 
channel2 = GLib.IOChannel.new_file("output_py.txt", "r")
status, str_return = channel2.read_to_end()
print(str_return.decode("utf-8"))
channel2.shutdown(True)
で同様になる。
PyGObject は g_io_channel_write_chars が使えない。
g_io_channel_write は既に非推奨、これは困る。
それより read での挙動が違うんですけど。
Gjs は JavaScript 文字列で戻るけど PyGObject はデコードが必要。
write はそのまま UTF-8 で書き出しなのにチグハグです。
同じライブラリを使っているはずなのに。
やはり Gjs でまとめ直したほうが無難っぽい。