首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何与Pywikibot一起使用气流

如何与Pywikibot一起使用气流
EN

Stack Overflow用户
提问于 2019-11-29 12:44:55
回答 3查看 117关注 0票数 2

当在DAG文件(或DAG文件导入的模块)中导入pywikibot时,DAG就会中断,从而在webserver中抛出错误:

代码语言:javascript
复制
Broken DAG: [/path/to/airflow/dags/dag.py] encode() argument 1 must be str, not bool

我试图找到堆栈跟踪,但通过在airflow/logs中进行搜索找不到任何东西。运行airflow list_dags成功,并且无助于调试问题(如this question所建议的),即使使用--report也是如此。

因此,我的问题是:我如何在气流数据组的任务中使用Pywikibot??

我在下面添加了更多的信息,以显示到目前为止我尝试了什么。在我们找到答案后,这可以删除,以使问题更多的思考。

下面是DAG示例的代码:

代码语言:javascript
复制
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import timedelta, datetime

#### this part is typically imported from another module ####
# to import, pywikibot requires `user-config.py` file or this env variable
import os
os.environ['PYWIKIBOT_NO_USER_CONFIG'] = '1'
import pywikibot
def do_nothing():
    pass
#############################################################

dag = DAG('try_pywikibot', schedule_interval=timedelta(days=1))

default_args = {
    'start_date': datetime(2019,1,1),
}

task1 = PythonOperator(
    python_callable=do_nothing,
    task_id=f'do_nothing',
    dag=dag,
    default_args=default_args,
)

关于导入pywikibot的注意事项: Pywikibot需要工作目录中的配置文件user-config.py,除非PYWIKIBOT_NO_USER_CONFIG env变量指定为0。这类文件的示例:

代码语言:javascript
复制
family = 'wikipedia' # required
mylang = 'en' # required
# verbose_output = 0  # optional

我认为这可能是因为pywikibot的日志记录(发送bool?)。在pywikibot的配置文件(user-config.py)中添加verbose_output = 0可以关闭详细的日志记录,但这不能解决问题。

奇怪的是,运行这个简单的脚本

代码语言:javascript
复制
import pywikibot
import airflow

使用带有user-config.pyverbose_output=0文件,仍然可以从pywikibot输出详细的日志。但是,当不导入气流时,它会在没有任何日志输出的情况下运行。然而,我尝试通过修改库的pywikibot来完全禁用日志记录,即使导入了气流,它也会禁用日志记录,但是DAG仍然被认为是被气流破坏了。

当手动触发DAG时,DAG会“启动”,但是任务从未排队;它们仍然停留在状态None中。

EN

回答 3

Stack Overflow用户

发布于 2019-12-02 15:05:50

将行console_encoding="utf-8"添加到pywikibot的配置user-config.py中就可以了。

为什么我不确定。当在气流中运行时,Pywikibot似乎无法加载console_encodingutf-8的默认值。因为pywikibot的transliterator是急于加载的,这会导致在ln的pywikbot.userinterfaces.transliteration.py中出现故障。1108。

奇怪的是,pywikibot似乎期待一个布尔值,现在抛出

代码语言:javascript
复制
_DifferentTypeError: Configuration variable "console_encoding" is defined as "str" in your user-config.py but expected "bool".

但是,这是可以安全地忽略的。

票数 1
EN

Stack Overflow用户

发布于 2021-01-12 17:46:06

以下任一项:

  1. 框架的config2.py被更改了,永远不应该做。

  1. -- Pywikibot可能已经过时了。默认情况下,'utf-8'.

sys.stdout.encoding,应该是sys.stdout.encoding

这取决于Python和Pywikibot版本。

票数 0
EN

Stack Overflow用户

发布于 2021-03-06 17:32:17

我也遇到了类似的问题,谷歌把我带到了这里。这个解决方案并不能解决你的问题,正如你所看到的那样,你所解决的问题不同。然而,这可能会对其他人有所帮助:

https://phabricator.wikimedia.org/T272088

解决方法是插入记录器并更改pywiki的logLevel:

代码语言:javascript
复制
import logging
import pywikibot
pywikibot.output('This will initialize the logger')
logger = logging.getLogger('pywiki')
logger.setLevel(logging.WARNING)

这是一个解决办法,直到它被修复!

只是下一次友好的进步,如果你说你使用的是哪个python/pywikibot版本,它也可以帮助别人;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59105092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档