【问题标题】:pywikibot: how to handle user-config.py owned by someone else?pywikibot:如何处理他人拥有的 user-config.py?
【发布时间】:2015-12-21 23:30:17
【问题描述】:

我可能以超出项目预期方式的方式使用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 错误跟踪器中创建问题可能是开始着手制定更可持续的解决方案的好方法,但项目过于分散,我真的不知道在哪里做。)

【问题讨论】:

  • 这是在 Windows 还是 Linux 上?
  • 好问题。它在带有 Cygwin 的 Windows 上。但是 IIRC 我过去在 Linux 上遇到过非常类似的问题。

标签: python pywikibot


【解决方案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__.py in pywikibot/tools。我已经有几年没有更新 PWB 了,所以不确定从那以后它发生了多少变化,但希望这与某人有关(或者至少在我升级 PWB 时它会对我有用,哈哈)。

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


更新 - 如果其他人有兴趣这样做,我写了 an entire blog post 关于使 PWB 在 WSL 1 中工作的内容

【讨论】:

    【解决方案2】:

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

    chmod 600 user-config.py
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多