How to catch exception output from Python subprocess.check_output()?

后端 未结 7 1170
灰色年华
灰色年华 2020-11-29 00:35

I\'m trying to do a Bitcoin payment from within Python. In bash I would normally do this:

bitcoin sendtoaddress  
         


        
7条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-11-29 01:02

    Based on the answer of @macetw I print the exception directly to stderr in a decorator.

    Python 3

    from functools import wraps
    from sys import stderr
    from traceback import format_exc
    from typing import Callable, Collection, Any, Mapping
    
    
    def force_error_output(func: Callable):
        @wraps(func)
        def forced_error_output(*args: Collection[Any], **kwargs: Mapping[str, Any]):
            nonlocal func
    
            try:
                func(*args, **kwargs)
            except Exception as exception:
                stderr.write(format_exc())
                stderr.write("\n")
                stderr.flush()
    
                raise exception
    
        return forced_error_output
    

    Python 2

    from functools import wraps
    from sys import stderr
    from traceback import format_exc
    
    
    def force_error_output(func):
        @wraps(func)
        def forced_error_output(*args, **kwargs):
            try:
                func(*args, **kwargs)
            except Exception as exception:
                stderr.write(format_exc())
                stderr.write("\n")
                stderr.flush()
    
                raise exception
    
        return forced_error_output
    

    Then in your worker just use the decorator

    @force_error_output
    def da_worker(arg1: int, arg2: str):
        pass
    

提交回复
热议问题