我可能以超出项目预期方式的方式使用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错误跟踪器中创建一个问题可能是开始实现更可持续解决方案的一个好方法,但项目如此分散,我无法确定在哪里做到这一点。)
答案 0 :(得分: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
中的pywikibot/tools
。我已经有两年没有更新PWB了,所以不知道从那以后有多少更改,但是希望这与某人有关(或者至少在我升级PWB时对我有用)。
WSL中的问题特别是我无法chown
对自己说,所以afaik唯一的选择是将所有内容都以root身份进行,我想我宁愿注释此代码而不是以root身份进行所有操作
更新-我写了an entire blog post关于如果有其他人有兴趣的话,使PWB在WSL 1中工作
答案 1 :(得分:0)
通过以下方式将读/写权限更改为只读:
chmod 600 user-config.py