前回のつづき。DB内のデータから画像を表示できるようになった!
成果物
開発環境
- Linux Mint 17.3 MATE 32bit
- SQLite 3.8.2
- Python 3.4.3
背景
SQLite3に保存したHTML文字列データをHTMLとして描画し、ディスプレイに表示したい。
本当はリアルタイム編集できるようにしたい。つまり、ファイル保存せず、textデータやio.StringIO
などメモリ上の文字列データを渡すとリアルタイムに反映されるようにしたい。
いちいち編集するたびにファイルに書き込むことを避ければディスクの劣化も避けられる。
今回
上記のようなことができる方法は見つけられなかった。
HTMLファイルを渡すことでブラウザ起動し、表示する方法なら見つけたのでやってみた。
参考
Redirecting… https://webcache.googleusercontent.com/search?q=cache:TSzLGAYNPcsJ:https://docs.python.jp/3/library/webbrowser.html+&cd=1&hl=ja&ct=clnk&gl=jp
要点
import webbrowser
webbrowser.open_new_tab(uri)
ローカルファイルの場合はURIを以下のようにする。
uri = 'file:///' + 'home/user/test.html'
HTTP上にある場合はURIを以下のようにする。
uri = 'https://' + 'www.google.co.jp/'
やりたかったこと
from io import StringIO import webbrowser html = """<html> <head></head> <body><p>Hello World on memory!</p></body> </html>""" webbrowser.open_new_tab(StringIO(html))
io.StringIOを渡してHTMLを描画できたら嬉しかった。べつに普通のテキスト変数値でもいい。UIでHTML文字列を編集するとすぐ表示に反映されるのが理想。
しかし現実は実行すると以下のようなエラーがでる。webbrowser.open_new_tab()
はURIしか引数に取れないと思われる。
Traceback (most recent call last): File "main.py", line 13, in <module> webbrowser.open_new_tab(StringIO(html)) File "/usr/lib/python3.4/webbrowser.py", line 68, in open_new_tab return open(url, 2) File "/usr/lib/python3.4/webbrowser.py", line 60, in open if browser.open(url, new, autoraise): File "/usr/lib/python3.4/webbrowser.py", line 157, in open for arg in self.args] File "/usr/lib/python3.4/webbrowser.py", line 157, in <listcomp> for arg in self.args] TypeError: Can't convert '_io.StringIO' object to str implicitly
所感
ファイルでなくメモリ上のテキストから表示する方法はないものか。