Запись в Python данных в локальный файл и одновременная загрузка на FTP не работает - PullRequest
1 голос
/ 04 мая 2020

У меня странная проблема с моим кодом на Raspberry Pi 4.

from gpiozero import CPUTemperature
from datetime import datetime
import ftplib

cpu = CPUTemperature()
now = datetime.now()
time = now.strftime('%H:%M:%S')

# Save data to file
f = open('/home/pi/temp/temp.txt', 'a+')
f.write(str(time) + ' - Temperature is: ' + str(cpu.temperature) + ' C\n')

# Login and store file to FTP server
ftp = ftplib.FTP('10.0.0.2', 'username', 'pass')
ftp.cwd('AiDisk_a1/usb/temperature_logs')
ftp.storbinary('STOR temp.txt', f)

# Close file and connection
ftp.close()
f.close()

Когда у меня есть этот код, скрипт ничего не записывает в файл .txt и файл, который передается на FTP-сервер имеет размер 0 байт.

Когда я удаляю эту часть кода, сценарий прекрасно записывает в файл.

# Login and store file to FTP server
ftp = ftplib.FTP('10.0.0.2', 'username', 'pass')
ftp.cwd('AiDisk_a1/usb/temperature_logs')
ftp.storbinary('STOR temp.txt', f)

...

ftp.close()

Я также пытался записать в файл произвольный текст и запустите скрипт, и файл передается нормально.

У вас есть идеи, что я пропускаю?

1 Ответ

1 голос
/ 04 мая 2020

После записи файла указатель файла находится в конце. Поэтому, если вы передадите дескриптор файла на FTP, он ничего не прочитает. Следовательно, ничего не загружено.

У меня нет прямого объяснения того факта, что локальный файл оказывается пустым. Но странный способ сочетания режима добавления и чтения может быть причиной. Я даже не вижу режим a+, определенный в open документации по функциям .


Если вы хотите добавить данные в локальный файл и на FTP, я предлагаю вам либо :

  • Добавить данные в файл - Найти исходное положение - И загрузить содержимое добавленного файла.
  • Записать данные в память и затем отдельно 1) сбросить вход -памяти данные в файл и 2) загрузить его.
...