3

我可能以超出项目预期方式的方式使用pywikibot。我希望几个用户使用相同的user-config.py. 不幸的是,这给了我这个错误:

警告:跳过'...pywikibot/user-config.py':由其他人拥有。

我目前的解决方案是在以下位置评论其中的一些代码pywikibot/config2.py

    _filestatus = os.stat(_filename)
    _filemode = _filestatus[0]
    _fileuid = _filestatus[4]
    if sys.platform == 'win32' or _fileuid in [os.getuid(), 0]:
        if sys.platform == 'win32' or _filemode & 0o02 == 0:
            with open(_filename, 'rb') as f:
                exec(compile(f.read(), _filename, 'exec'), _uc)
        else:
            print("WARNING: Skipped '%(fn)s': writeable by others."
                  % {'fn': _filename})
    else:
        print("WARNING: Skipped '%(fn)s': owned by someone else."
              % {'fn': _filename})

即我只保留这部分:

    with open(_filename, 'rb') as f:
        exec(compile(f.read(), _filename, 'exec'), _uc)

这真的不是处理这个问题的好方法。所以我很好奇,有没有更好的方法?更好:如果我(或将来的其他人)升级 Pywikibot,事情不会在这里中断。

(在 Pywikibot 错误跟踪器中创建一个问题可能是开始朝着更可持续的解决方案工作的好方法,但该项目如此分散,我真的不知道在哪里做。)

4

2 回答 2

1

我在尝试调试同样的问题时发现了这个线程。我正在使用 WSL 并最终使用了 OP 的解决方法(注释掉那些代码行),但另外还必须注释一行代码:

def file_mode_checker(filename, mode=0o600):
    """Check file mode and update it, if needed.

    @param filename: filename path
    @type filename: basestring
    @param mode: requested file mode
    @type mode: int

    """
    warn_str = 'File {0} had {1:o} mode; converted to {2:o} mode.'
    st_mode = os.stat(filename).st_mode
    if stat.S_ISREG(st_mode) and (st_mode - stat.S_IFREG != mode):
        # the following is the line I commented:
        # os.chmod(filename, mode)
        # re-read and check changes
        if os.stat(filename).st_mode != st_mode:
            warn(warn_str.format(filename, st_mode - stat.S_IFREG, mode))

以上来自__init__.pypywikibot/tools。我已经有几年没有更新 PWB 了,所以不确定从那以后它发生了多大的变化,但希望这与某人有关(或者至少在我升级 PWB 时它会对我有用,哈哈)。

WSL 中的问题特别是我无法对chown自己如此 afaik 唯一的其他选择是以 root 身份做所有事情,我想我宁愿评论这段代码也不愿成为所有事情的 root。


更新 -如果其他人有兴趣这样做,我写了一篇关于使 PWB 在 WSL 1 中工作的完整博客文章

于 2020-07-19T22:30:19.987 回答
0

将读/写权限更改为只读:

chmod 600 user-config.py
于 2019-10-31T14:35:14.827 回答