« 2021年12月 | メイン | 2022年02月 »

2022年01月21日

python 標準出力の取得

1,テキストへ
import sys
sys.stdout = open(str(os.getpid()) + ".out", "w", buffering=0) #これでバファリンぐが無くなる!?
print "HELLO WORLD!" #この時点でtemp.txtに"HELLO WORLD!"がwriteされている
sys.stdout.close()

#いつもの標準出力に戻す
sys.stdout = sys.__stdout__


2,データとして取得

import sys
import io
fp = io.StringIO("")
sys.stdout = fp
print("HELLO WORLD!") #この時点でtemp.txtに"HELLO WORLD!"がwriteされている
#sys.stdout.close()
print("poge")
sys.stdout = sys.__stdout__
print("ぽにょ")
print(fp.getvalue())

投稿者 muuming : 18:00

2022年01月05日

python kivyのスレッド

python自体にスレッドの仕組みは入っている

thread = threading.Thread(target=self.showImg, args=(path,file))
thread.start()

とかすれば動作します。


が、しかし、しかしながらkivyの場合はメインスレッド以外から表示を変更することには対応していないよう。画像の表示を変更しようとしても真黒になるだけでした。

こういう時はkivyについてるスレッドの仕組み
Clock.schedule_once(...)
を使うと良いらしい

https://github.com/kivy/kivy/issues/1317

結局 画像を作る重い処理は threading.Thread( で後ろに回して
表で Clock.schedule_interval(self.updateImg, 0.2) として繰り返して 画像が出来上がってたら表示変更という流れにしました。表示変更終わったら Clock.unschedule(self.updateImg) しました

メインスレッド以外での画面更新はやはり対応していないっぽい
Clock.schedule_once や Clock.unscheduleもメインスレッドだと理解した。正しいのかはわからないがw

投稿者 muuming : 15:10