-
Notifications
You must be signed in to change notification settings - Fork 121
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
last_error_messageではなく標準出力にエラーログを流すようにする #95
Comments
Python ctypesで共有ライブラリが吐き出す標準エラー出力を抑制したことがあったので、実装例を貼っておきます。 システムコールdup, dup2が呼び出せれば、ほかの言語でも同じことはできそう・・・? # 標準出力・標準エラー出力の抑制デコレータ
def silent(verbose=False):
def _silent(func):
def wrapper(*args, **kwargs):
if not verbose:
devnull = open(os.devnull, 'w')
stdout = os.dup(1) # stdin: 0, stdout: 1, stderr: 2
stderr = os.dup(2)
os.dup2(devnull.fileno(), 1)
os.dup2(devnull.fileno(), 2)
res = func(*args, **kwargs)
if not verbose:
os.dup2(stdout, 1)
os.dup2(stderr, 2)
devnull.close() # NOTE: closeの保証がない?
return res
return wrapper
return _silent
class Network:
def __init__(self, meta_file, cfg_file, weights_file, verbose=False):
@silent(verbose=verbose)
def _init():
self.net = load_net(cfg_file.encode('ascii'), weights_file.encode('ascii'), 0) # c function (ctypes)
self.meta = load_meta(meta_file.encode('ascii')) # c function (ctypes)
_init() |
なるほどです!! |
C++からRust化した時点、というより #126 の時点で達成していると思うのでcloseします。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
内容
エラーが出た後にエラーメッセージをgetする方式にしていますが、エラーログはglobal変数で管理しており、何かと不便です。
実際に使う際、エラーメッセージが見れればOKだと思うので、stderrにエラーログを流す運用に変えるissueになります。
この辺りの内容です
Pros 良くなる点
コードの見通しが立ちやすい
Cons 悪くなる点
実際に利用する際、「エラーメッセージをダイアログに表示する」等ができなくなる?
実現方法
srd:cerr
その他
ライブラリ実行時の標準エラーってキャプチャできるのでしょうか。
別プロセスを作らないと無理・・・?
The text was updated successfully, but these errors were encountered: