全体的に内容が古くなった 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 でまとめ直したほうが無難っぽい。