Python: OverflowError long int слишком велик для преобразования в int - PullRequest
0 голосов
/ 06 мая 2020

После многих лет поиска ответов здесь, наконец, пришло время задать свой первый вопрос.


Запуская RPI3B + как мини-сервер дома, я хочу иметь возможность отправлять большие файлы друзьям и родственникам через inte rnet через интерфейс командной строки. Для этого я использую это: https://github.com/justbeamit/beam/blob/master/beam

Но когда я хочу загрузить файл размером более ~ 1,5 ГБ ( по моей оценке ), Я получаю сообщение об ошибке:

OverflowError
long int too large to convert to int

После недолгого исследования я вижу, что это происходит из строки 288, где установлено максимальное значение индикатора выполнения, в этом методе:

def transfer(token, filePaths):

  print("recipient has connected! starting transfer...")

  uploadUrl = ACTIVE_BACKEND + "/upload"

  try:

    index = 0
    ProgressBar.totalNumberOfFiles = len(filePaths)

    for filePath in filePaths:

      # make the console look pretty
      sys.stdout.write("\n")
      print("  " + filePath)

      # the callback function invoked by the monitor
      def updateProgress(monitor):
        theProgressBar.update(monitor.bytes_read)


      # setup the multi-part encoder & its monitor
      fileMPE = getMultipartEncoder(filePath)
      monitor = MultipartEncoderMonitor(fileMPE, updateProgress)

      # setup the progress bar
      ProgressBar.fileNumber = index + 1 # to avoid showing (0 of 3)

      # since the progress bar will be updated by the multi-part encoder, we can't set 'maxval'
      # to be the file's size since the encoder adds extra bytes to account for the header
      theProgressBar = ProgressBar(
        maxval = len(fileMPE), 
        widgets = WIDGETS,
      )

      theProgressBar.start()

      urlParams = {
        "type": "CLI",
        "token": token,
        "index": index
      }

      requests.post(
        uploadUrl,
        data=monitor,
        params=urlParams,
        headers={'Content-Type': monitor.content_type}
      )

      theProgressBar.finish()
      index += 1
    # end for loop

  except Exception as e:
    print(e.__class__.__name__)
    print(e)
    exit()

  finally:
    sys.stdout.write("\n")

Кто-нибудь может мне помочь? Это раздражает, потому что без индикатора выполнения все работало бы отлично. Я попытался прокомментировать эту строку, но затем ошибка переместилась в другое место, в строку 300 ( requests.post ).


Моя информация:

python --version => Python 2.7.13

Версия Raspbian => PRETTY_NAME = "Raspbian GNU / Linux 9 (растянуть)"

1 Ответ

0 голосов
/ 06 мая 2020

Вы уверены, что общий размер файла не превышает 4 ГБ? Я думаю, вы столкнулись с этой Python «ошибкой» , поскольку ваш Pi, вероятно, работает на 32-битной версии.
Проблема также упоминается в requests_toolbelt коде .
Чтобы исправить это, вам нужна более свежая версия requests_toolbelt (я успешно тестировал 0.6.0) и небольшое изменение beam :

theProgressBar = ProgressBar(
    maxval = fileMPE.len,
    widgets = WIDGETS,
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...