pywikibot: как работать с user-config.py, принадлежащим кому-то другому?
Я, вероятно, использую 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 ответов
Я нашел эту ветку, пытаясь отладить ту же проблему. Я использую 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 lol).
Проблема в WSL в том, что я не могу chown
для себя, так что, кстати, единственный другой вариант - делать все как root, и я думаю, что лучше прокомментировать этот код, чем быть root для всего.
Измените разрешение на чтение / запись на только чтение с помощью:
chmod 600 user-config.py