Я пытаюсь написать короткий фрагмент кода, который позволит мне записать серийный номер Raspberry Pi и дату / время в текстовый файл.Эта информация будет записываться на флешку каждый раз, когда она подключена к моей Raspberry Pi.Этот скрипт будет использоваться на нескольких Raspberry Pi с разными USB-флешками, поэтому я стараюсь быть как можно более общим, потому что меняются пути и т.д. между частями оборудования.
Первая часть моего скрипта работает нормально:
#import packages
from datetime import datetime
import os
import os.path
from shutil import copyfile
usblist = [x for x in usblist if not x.startswith('SETTINGS')] #For some reason I have some folders starting with SETTINGS that I don't want to delete but simply ignore in my list
#create a new list with the paths for each USB
usbpathlist = os.path.abspath(usblist[0]),os.path.abspath(usblist[1]) #I will only have two USB sticks inserted at a time
#for some reason my paths show as in the /home/ directory when it appears that they are mounted in /media/
usbpathlist = [w.replace('home', 'media') for w in usbpathlist] #this fixes the paths
Затем я извлекаю информацию, уникальную для Raspberry Pi, и дату / время и сохраняю их как переменные
def getserial():
#Extract the serial number from the cpuinfo file
cpuserial = "0000000000000000"
try:
f = open("/proc/cpuinfo", "r")
for line in f.readlines():
if line[0:6] == "Serial":
cpuserial = line[10:26]
f.close()
except:
cpuserial = "ERROR00000000000"
return cpuserial
rpi_serial = getserial()
time_experiment = str(datetime.now())
Теперь я записываю эту информацию в виде текстового файла.
with open("rpi_information.txt", "w") as rpi_information:
rpi_information.write("Raspberry Pi Serial Number: " + rpi_serial + "\n") #Write the serial number
rpi_information.write("Time written: " + time_experiment + "\n") #Write the date
rpi_information.close()
Наконец, проблемная часть моего скрипта - это то, где я пытаюсь сохранить этот файл в пути моих USB-флешек, которые я сохранил выше как 'usbpathlist'
for d in usbpathlist:
copyfile(rpi_information, d)
ОтВот в чем заключается моя проблема: я потратил довольно много времени на поиск и поиск в этом сайте, но не смог выяснить, как сохранить этот файл на каждой флешке после того, как он был создан.Большая часть информации в Интернете говорит о том, что я не могу сохранить текстовые файлы в нескольких местах одновременно, но это кажется маловероятным.Если я вручную вставлю путь перед «rpi_information.txt» выше, он сохранится без проблем.Моя проблема в том, что из-за того, что мои флешки будут другими, эти пути будут меняться, поэтому я не думаю, что это хорошее решение.Ошибки, которые я получал от этой последней части скрипта (как, вероятно, ожидается):
Traceback (most recent call last):
File "home/pi/test.py", line 55 in <module> #test.py is my filename
copyfile(rpi_information, d)
File "/usr/lib/python3.5/shutil.py", line 103, in copyfile
if _samefile(src,dst):
File "/usr/lib/python3.5/shutil.py", line 88, in samefile
return os.path.samefile(src,dst)
File "/usr/lib/python3.5/genericpath.py", line 90, in samefile
s1 = os.stat(f1)
TypeError: argument should be string, bytes, or integer, not _io.TextWrapper
В конечном счете, я хотел бы найти способ передать этот файл на обе флешки без проблем,Я хотел бы сохранить эту информацию в виде текстового файла, потому что я буду ссылаться на нее позже на другом компьютере.Буду признателен за понимание того, как сделать эту работу, или за любые комментарии о том, как улучшить мой код.Это мой первый скрипт на Python и мой первый вопрос о StackOverFlow (хотя я скрывался годами), поэтому, пожалуйста, будьте осторожны со мной!Я прочитал много документации по этой проблеме, поэтому я просто сбит с толку.Заранее благодарим за помощь.
--- EDIT --- Пользователь Vulcan ниже предположил, что моей ошибкой было то, что я не смог включить ".txt" в функцию copyfile.Я пробовал это ранее, но безрезультатно.К сожалению, это приводит к ошибке:
Traceback (most recent call last):
File "home/pi/test.py", line 55 in <module> #test.py is my filename
copyfile(rpi_information.txt, d)
AttributeError: '_io.TextWrapper' object has no attribute 'txt'