将从Flask内部调用的脚本输出重定向到其自己的日志文件中

时间:2016-02-19 04:42:09

标签: python logging flask stdout io-redirection

我的Flask应用程序中的一个用户选项是触发web-scrape。这个过程的输出(实际上任何外部过程,以及主要Flask应用程序本身的输出)是stdout,这是我启动我的主要Flask应用程序的终端。

我希望在终端中维护整个Flask日志,同时将日志从抓取过程强制转换为自己的文件(用于下载)。所以给出:

@app.route("/download-log", methods=["GET"])
def downloadlog():
    # Check for valid file and assign it to `inbound_file`
    with open('log.txt', 'r') as log:
        contents = log.read()
        response = make_response(contents)
        response.headers["Content-Disposition"] = "attachment; filename=log.txt"
        return response

..运行良好,我需要 log.txt (目前只是一个touch ed文件用于概念验证)作为抓取过程的日志,我这么称呼:

@app.route('/scrape', methods=['GET', 'POST'])
@login_required                                 # Use of @login_required decorator
def scrape():
    scraper.scrape('/path/to/URLs.csv', ['manager'])

其中scraper是一个独立的python脚本,可以并且确实正常运行它自己的蝙蝠,但是这里是从Flask应用程序中调用的。 scraper.py使用print语句进行日志记录。我知道如何在调用脚本本身时将stdout重定向到文件中,但是当从Flask应用程序调用时,如何将scraper.py的stdout导入到文件中?

我已采用此处给出的示例stackoverflow.com/a/6386990并仅应用于scraper.py。它实现了日志式日志记录,但是整个应用程序的日志以及来自scraper的日志仍然被重定向到log.txt

1 个答案:

答案 0 :(得分:1)

编辑scraper.py并将重定向添加到日志文件中:

import sys
sys.stdout = sys.stderr = open('log.txt','wt')