Python oserror: [errno 5] ошибка ввода / вывода - код прекрасно работает в Windows Pycharm Env, но ошибка, когда он работает в Ubuntu (по Docker) - PullRequest
1 голос
/ 25 сентября 2019

Я сделал простой код, который является одновременно программой для копирования файлов. Это не выдает ошибку выше, когда я работаю с Windows Env.Тем не менее, я сделал Docker-контейнер , который выполняет ubuntu , а также я работаю с моей директорией хоста, и она отлично работает, когда размер файла небольшой, но когда я тестирую файл, размер которого превышает 2 ГБ, он даетмне выше ошибка.Опять же, этот тест был в порядке, когда я работаю на Windows Pycharm.

import os
import queue
import time
import threading

class FileCopy(threading.Thread):
    q = queue.Queue()
    semaphore = 0
    buffer_size = 1024*1024

    def __init__(self, fileName, newFileName):
        threading.Thread.__init__(self)
        self.fileName = fileName
        self.newFileName = newFileName

    def run(self):
        with open(fileName, 'rb') as src, open(newFileName, 'wb') as dst:
            FileCopy.q.put((self, "start"))
            FileCopy.write_log()
            while True:
                copy_buffer = src.read(FileCopy.buffer_size)
                if not copy_buffer:
                    FileCopy.q.put((self, "complete"))
                    FileCopy.write_log()
                    break
                dst.write(copy_buffer)

    @classmethod
    def write_log(cls):
        while True:
            if FileCopy.semaphore >= 1:
                continue
            else:
                FileCopy.semaphore += 1
                with open("log.txt", 'a') as f:
                    log, when = FileCopy.q.get()
                    msg = ""
                    if when == "start":
                        msg = "%.2f Start copying %s to %s\n" % (time.time()-start_time, log.fileName, log.newFileName)
                    elif when == "complete":
                        msg = "%.2f %s is copied completely\n" % (time.time()-start_time, log.newFileName)
                    f.write(msg)
                FileCopy.semaphore -= 1
                break


start_time = time.time()

while True:
    fileName = input("Input the file name: ")
    if os.path.exists(fileName):
        newFileName = input("Input the new name: ")
        copyThread = FileCopy(fileName, newFileName)
        copyThread.start()
    else:
        print("no file")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...