【问题标题】:selenium chromedriver: chrome.exe open the python logging filehandler fileselenium chromedriver: chrome.exe 打开python logging filehandler 文件
【发布时间】:2015-06-18 11:01:44
【问题描述】:

我设置了记录器处理程序,然后启动了 chrome webdriver。当它尝试旋转日志文件时,它会得到 [错误 32],这是因为它无法重命名日志文件。我发现日志文件是由 Chrome 打开的。

我更改了设置记录器的顺序并启动了chrome webdriver。它将成功旋转日志文件。当我的脚本重新启动chrome时,错误再次发生。我每次启动时都必须设置logger.handlers = []新的 chrome webdriver 实例。

我尝试了--disable-logging,但它不起作用。

为什么chrome.exe会打开python logging filehandler的日志文件?

有没有办法避免chrome打开日志文件?

这是我的脚本。

import time
import logging
from selenium import webdriver
from logging.handlers import TimedRotatingFileHandler

logger = logging.getLogger('m')
def set_logger():
    logger.setLevel(logging.DEBUG)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s: %(message)s',
                                  datefmt='%Y-%m-%d %H:%M:%S')
    rotate_file_handler = TimedRotatingFileHandler('D:\\data\\spam.log',
                                                   when='s', interval=10, backupCount=10)
    rotate_file_handler.setLevel(logging.INFO)
    rotate_file_handler.setFormatter(formatter)
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.DEBUG)
    console_handler.setFormatter(formatter)
    logger.addHandler(rotate_file_handler)
    logger.addHandler(console_handler)

if __name__ == '__main__':
    # change the order these two, it will work correct.
    # or set logger.handlers = [], it will work too.
    set_logger()
    b = webdriver.Chrome()

    for i in range(100):
        logger.info(i)
        time.sleep(1)

这是 Traceback。(Windows 7 SP1 x86_64,python=2.7.10,chrome=43.0.2357.81,chromedriver=2.15.322448)。

Traceback (most recent call last):
  File "C:\Python27\lib\logging\handlers.py", line 77, in emit
    self.doRollover()
  File "C:\Python27\lib\logging\handler.py", line 350, in doRollover
    os.rename(self.baseFilename, dfn)
WindowsError: [Error 32]
Logged from test.py, line 28

【问题讨论】:

  • 能否给我们完整的堆栈跟踪信息?
  • 已更新。@ArtOfWarfare
  • 我认为这与硒或铬没有任何关系。我认为进行该方法调用只会导致大量日志记录。如果您在进行该调用时没有设置日志记录处理程序,则没有问题。所以我会改变这个问题,不再让它看起来像一个硒或铬问题,而是专注于记录和重命名日志文件。

标签: python google-chrome logging webdriver selenium-chromedriver


【解决方案1】:

我今天也遇到了同样的问题。经过一番挖掘,我发现了问题所在。

问题的根源在于python本身。在 3.4 版之前,包括 2.x 早午餐,python 默认创建可继承的文件描述符(据我了解,几乎所有与文件相关的操作),用户无法更改此行为。 selenium chromedriver用子进程调用webdriver.exe时,日志文件handler会被webdriver进程继承,这样会阻止日志翻转操作,导致报错。

根据pep-0446,此问题已在版本 3.4 中得到解决。

看来解决这个问题的唯一方法是升级到python 3.4或更高版本。对于 python 2.7 brunch,这个问题似乎已经被标记为“不会修复”状态,见issue26769

脚本的解决方法是避免使用 TimedRotatingFileHandler,这样它就不会旋转并触发错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-24
    • 2023-04-11
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    相关资源
    最近更新 更多