さて前回やった cbr ファイルの展開を我がアプリに実装するのだが。
アレは完全なる unrar コマンド依存である。
つまり、使う側のマシンに unrar が入っているかどうかを調べなければいけない。
ライブラリやコマンドが入っていないマシンなら華麗に受け流すようにするべき。
かなり重要なコトなのにそういう Tips を書く人が少ないんだよなぁ。
まあソレは置いておいて。
16.16. ctypes ? Pythonのための外部関数ライブラリ ? Python 3.5.2 ドキュメント
ctypes.util.find_library(name)
でライブラリの有無を調べられるってことなんだけどコレって意味あるのか?
そもそも Python では使う機会が少ないしどうでもいいか。
いや、今回のはライブラリじゃなくてコマンドの有無。
Bashでコマンドの存在チェックはwhichよりhashの方が良いかも→いやtypeが最強 – Qiita
そうか type コマンドを使うのか。
ってソレよく考えたら自分で書いていた。
シェルスクリプトの覚書色々/コマンドの存在を確認してから実行
標準出力ではなく終了ステータスがゼロ(正常終了)かどうかを調べる。
g_spawn_command_line_sync なら第四引数がゼロになるかを調べればいい。
PyGObject だと戻り値タプルの四番目になるので
#!/usr/bin/env python3 from gi.repository import GLib is_unrar = GLib.spawn_command_line_sync("type unrar")[3] == 0 if is_unrar: print("unrar is in your machine") else: print("unrar not found...") # test print(GLib.spawn_command_line_sync("type unko")[3] == 0)
標準出力の値は勝手に捨ててくれる。
これで振り分けは大丈夫そうだ。
みなさん、ko というアーカイブは絶対に作ってはいけません。
ところで小牧駅周辺がカイロスの巣っぽくなっているのは何故だ?
用事ついでに歩いたらやたらイッパイ出たんだけーが。