2

我想从 Docker 容器内运行 pywikibot,所以我可以从云(可能是 Azure)运行一些 cron 作业。

我将我的 bot 和 user-config.py 文件的代码添加到我的 Docker 容器中,但是当它尝试更新某些页面时,它使用 getpass 从输入中读取密码:

Password for user BunykBot on wikipedia:uk (no characters will be shown): ^CWARNING: /usr/local/lib/python3.7/getpass.py:91: GetPassWarning: Can not control echo on the terminal.
  passwd = fallback_getpass(prompt, stream)

有没有办法从某个变量给它密码?我看到创建.lwp文件的 login.py 脚本使用site.login()which uses api.LoginManager,但没有在任何地方给它密码,所以它从输入中获取它。有什么方法可以让我不费吹灰之力地修补它吗?还是我需要一些更新的 pywikibot 分支?

4

3 回答 3

1

所以,我决定使用猴子补丁,并且刚刚创建了需要在 pywikibot 之前导入的文件:

import os

def patch_wiki():
    import pywikibot

    original = pywikibot.input

    def new_input(question, password=False, default='', force=False):
        if password:
            return os.getenv('WIKI_PASS')
        return original(question, password, default, force)

    pywikibot.input = new_input

if os.getenv('WIKI_PASS'):
    patch_wiki()

这对我有用。

于 2019-12-23T15:16:47.120 回答
0

请参阅https://phabricator.wikimedia.org/T248471以获取建议的补丁,以使 API 的密码使用更加容易

于 2020-03-27T08:55:26.043 回答
0

还有更好的选择,例如使用 BotPasswords 或 OAuth,请参阅https://lists.wikimedia.org/pipermail/pywikibot/2019-December/009968.html中的更多内容

于 2019-12-27T19:37:08.133 回答