我正在尝试编写一小段代码,这样我就可以将Raspberry Pi的序列号和日期/时间写入文本文件。每次将信息插入我的Raspberry Pi时,此信息都会写入USB记忆棒。这个脚本将用于具有不同USB记忆棒的多个Raspberry Pi,所以我一直试图尽可能通用,因为硬件之间的路径会发生变化等。
我的脚本的第一部分工作正常:
#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)
从这里开始我的问题所在 - 我花了很多时间在谷歌搜索和搜索这个网站,但我一直无法弄清楚如何在创建后将这个文件保存到每个USB记忆棒。网上有很多信息表明我实际上不能同时将文本文件保存到多个位置,但这似乎不太可能。如果我手动将路径插入" rpi_information.txt"上面,它没有问题。我的问题是,因为我的USB记忆棒会有所不同,所以这些路径会发生变化,所以我不认为这是一个很好的解决方案。我从脚本的最后一部分(可能是预期的)收到的错误是:
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
最终,我想找到一种方法将此文件传递给两个USB记忆棒。我希望将此信息保存为文本文件,因为我希望稍后在另一台计算机上引用它。任何有关如何使这项工作的见解将不胜感激或任何关于如何改进我的代码的意见也将不胜感激。这是我的第一个python脚本和我在StackOverFlow上的第一个问题(即使我潜伏了多年),所以请放轻松我吧!我已经阅读了很多关于这个问题的文档,所以我只是感到困惑。感谢您的帮助。
--- --- EDIT 下面的用户Vulcan表示我的错误是未能包括&#34; .txt&#34;在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'
答案 0 :(得分:0)
错误跟踪突出显示了您的问题:argument should be string... not _io.TextWrapper
。当您调用copyfile(rpi_information, d)
时,rpi_information
成员是文件句柄,而不是文件路径,copyfile
期望的文件类型之一。传递文件名:
for d in usbpathlist:
copyfile('rpi_information.txt', d)