python stdout不会重定向到线程中的文件

时间:2019-02-25 17:36:19

标签: python logging stdout

我有一个Web服务器,当触发以下操作时,它将剥离线程:

@app.route('/run', methods=['GET'])
def run_workflow():
    thread = threading.Thread(target=workflow.run)
    thread.start()
    return render_template('workflow.html', title='running')

workflow.run中,我将标准重定向到文件。如果我手动测试它,但在以其自己的线程启动时却无法测试:

def run():
    logs_path = os.path.join('logs/daily.log')
    sys.stdout = logs_path

    # doesn't work when threaded, even if flush after, never prints to console though...
    print('testing log') 

现在,我知道我可以将stdout重定向到调用工作流的Web api中的文件(例如此答案表明:Log output of multiprocessing.Process),但是随后它也会将flask所做的所有操作都重定向到文件。我不要我只想将衍生线程中的内容重定向到日志文件。

也许有更好的方法可以做到这一点?理想情况下,您可以这样做:

def run_workflow():
    thread = threading.Thread(target=workflow.run, logfile='workflow.log')
    ...

但是我想那太容易了。我可以用多处理来实现吗?

0 个答案:

没有答案