Python 3 запись поврежденного файла в общий ресурс smb (Python 2 работы) - PullRequest
0 голосов
/ 20 января 2020

У меня есть код для копирования файлов на сетевой ресурс. Код работает нормально (на ма c) с python 2.7.17, но дает мне поврежденный файл с Python 3.7.6. Я не знаю, является ли это ошибкой или изменением между python2 и python3, о котором я не знаю, но я не знаю, как заставить мой код работать.

Я читаю файл объемом 300 МБ из локальной файловой системы в память, проверяю sha1 содержимого, а затем записываю содержимое в общий сетевой ресурс (mount -t smbfs ... вызывается из subprocess.check_output).

def read(path):
    with open(path, "rb") as f:
        return f.read()
def write(content, smbpath, sha1):
    with open(smbpath, "wb") as f:
        if (sha1 == hashlib.sha1(content).hexdigest())
            f.write(content)

localroot = <local path>
smbroot = <remote path>
file = <some file.7z>
content = read(os.path.join(localroot, file)
write(content, os.path.join(smbroot, file), <sha read from local system>)

Python говорит, что значения файла SHA совпадают, но когда я вычисляю ша вручную (shasum smbroot/<file> из терминала), он дает другой ша. Если я копирую файл обратно в локальную файловую систему, он отличается от оригинала и выдает тот же (недействительный) SHA, что и shasum, созданный на общем ресурсе.

Я подозревал, что проблема может быть с сетевым диском, но

  • прекрасно работает с python2 и
  • , копирование файлов вручную с терминала работает.

Так что это, похоже, определено c до Python3. Известны ли изменения или ошибки?

...