- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在我的 app.py
模块中,我设置了一个带有控制台和文件处理程序的记录器,如下所示:
import logging
logger = logging.getLogger('app')
logger.setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler('gsam_log.txt')
console_handler.setLevel(logging.INFO)
file_handler.setLevel(logging.INFO)
c_formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
f_formatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
console_handler.setFormatter(c_formatter)
file_handler.setFormatter(f_formatter)
logger.addHandler(console_handler)
logger.addHandler(file_handler)
如果我在 Python 控制台中工作并且我这样做:from app import logger
它按预期工作 - 打印到控制台和文件。我想使用此记录器从我的 xlwings
潜艇(用 @xw.sub
装饰)进行记录。但出于某种原因,日志只发送到控制台而不是文件。下面是来自 test.py
模块的代码,我通过 xlwings 将其导入为 UDF 模块。
from app import logger
import xlwings as xw
@xw.sub
def test():
logger.debug('test')
logger.info('test')
logger.warning('test')
最佳答案
我不太熟悉 xlwings
的工作原理,但由于 logging
模块的工作原理错综复杂,我建议不要在全局范围内创建记录器模块,而是根据需要延迟创建它们。
在许多情况下,在全局范围内创建的日志在任何代码运行之前创建。然后,其他一些代码会重新配置日志记录,这会导致删除现有日志并忘记其配置。这就是 disable_existing_loggers=False
参数存在于 logging.config
函数(例如 https://docs.python.org/2/library/logging.config.html#logging.config.fileConfig)的原因。
要查看是否是这种情况,我建议将您的日志定义代码移动到一个函数中,并根据需要调用它,例如:
导入日志
# app.py
_logger = None
def get_logger():
global _logger
if _logger is None:
_logger = logging.getLogger('app')
_logger.setLevel(logging.DEBUG)
# ... continue to define your logger ...
return _logger
然后在你的函数中:
from app import get_logger
import xlwings as xw
@xw.sub
def test():
logger = get_logger()
logger.debug('test')
logger.info('test')
logger.warning('test')
应该注意的是,这不是使用日志记录的“最干净”的方式(通常这不应该是必需的)但是如果问题真的是一些其他模块扰乱了日志记录配置,可能很难解决。
关于python - 为什么 xlwings 禁止记录到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51632468/
我很难找到这个问题的答案 - 我正在编写一些简单的 VBA,目的是让我的同事可以将其安装为插件或自定义选项卡。来自 Python,当然,我更喜欢使用 xlwings 或 pyxll,但据我了解,为了调
我正在尝试通过 xlwings 导入用户定义的函数 (UDF),但遇到了问题。按下 xlwings 功能区中的导入函数按钮后,我收到以下运行时错误: `Run_time error '1004 `Me
我正在尝试执行两个操作:1)使用xlwings检查工作簿中是否存在工作表2) 使用变量名来激活使用 xlwings 的工作表。 工作表名称是一个变量,所以我不能使用 sheets[0] 选项或 she
我正在尝试使用 xlwings 将 Python 链接到 Excel。取得了很好的成功,但我无法链接到已经打开(和修改过)的 Excel 工作簿。所以工作簿已经在 Excel 中打开,我想链接到该工作
我需要迭代一堆 Excel 工作簿并从每个工作簿中获取一个值并将该值粘贴到一个新工作簿中,因此基本上将一堆 Excel 工作簿的结果合并到一个工作簿中。我的脚本现在运行的方式是将值复制并粘贴回原始工作
我想要实现的是扩展当前 Excel 表单中表格的长度(而不是附加到整个电子表格的底部),同时不替换表格下方的内容。 为此,我想要插入新行(例如在第 30 行)。 如何使用 xlwings 做到这一点?
我在 Windows 上使用 xlwings。我获取单元格的值并希望指示消息框。 import xlwings as xw import win32ui def msg_box(): wb =
在 Excel 单元格中,我调用函数 fff(DATE(2001,1,1))。为了接收日期参数,我使用(xlwings 0.10.0)以下代码: @xw.func @xw.arg('req_date'
如何从 Excel 中选择不带标题的整列? 例如,当我尝试以下代码时,它会选择包括标题在内的整个列: 将 xlwings 导入为 xw wb = xw.Book.caller()wb.sheets[0
我有一个已定义名称的 Excel,单元格 A1 已分配名称“myName”,xlwings 有没有办法从其名称而不是坐标中获取其内容? 应该是一样的 title, coord = next(w
有什么方法可以避免在使用 xlwings 时打开文件? 我听说一年前有更新,但我不知道问题是否已经解决。 最佳答案 从 0.10.4 版开始,xlwings 纯粹是通过正在运行的 Excel 实例来操
我正在尝试找出如何在写入后使用 xlwings 保存和关闭现有工作簿: import xlwings as xw list_of_values = [1, 2, 3] workbook_path =
我正在使用 xlwings 开发一个新项目,我想知道是否以及如何访问和/或设置工作簿的命名范围的名称。 我知道我们可以使用 Range() 函数访问命名范围,但是是否可以获取特定工作簿(例如调用者)的
我一直在尝试将一些列表写入工作簿上的某个工作表,但没有成功。我的代码是: import xlwings as xw from xlwings import Range from xlwings imp
我正在尝试查找包含数据的列中的最后一行。替换 vba 函数:LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row 我正在尝试这个,但这会拉入 E
我在这个网站上的第一个问题。 我在 python 2.7 中使用 xlwings。我想将“A1:A6”范围内的值从 Sheet1 复制到 Sheet2 中的单元格“A1:A6”。我的代码如下: > m
使用Python加载最新的Excel读取类库xlwings可以说是Excel数据处理的利器,但使用起来还是有一些注意事项,否则高大上的Python会跑的比老旧的VBA还要慢。 这里我们对比一下,用
1、需求: 某公司管理的多个资管计划每天生成A表,业务人员需手工打开每个A表,将某些行、列删除后方可打印上报。 现拟采用程序代替手工操作。 2、分析: 1、应在原始文件的副本上
我正在使用来自 xlwings 的 excel 文件,我想从代码中更改每个单元格的宽度和高度,理想情况下是创建一个完美的正方形,这可能吗? 在文档中,我在使用范围时发现了一个高度属性: ws1.ran
我已使用 xlwings 将数据框导出到 Excel,并尝试将其格式化为表格。我想应用“无”样式,但不知道如何指定“无”。 这条线有效: table = sheet.tables.add(source
我是一名优秀的程序员,十分优秀!