问题描述
HI经过数小时的研究,我来向人们求助,我有一个简单的脚本
import serial
serialport = serial.Serial("/dev/ttyACM0",115200,timeout=1)
while 1:
print serialport.readline(),
serialport.close()
该脚本的功能是从Arduino抓取数据并将其显示在Pi上。 我想做的是获取所有数据,仅打印1串数据。 例
在我的Arduino上,我有一套用于打印我的RFID卡的UID
// Display some basic information about the card
Serial.println("Found an ISO14443A card");
Serial.print(" UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
Serial.print(" UID Value: ");
nfc.PrintHex(uid, uidLength);
Serial.println("");
我在PI上获取的数据如下
Found an ISO14443A card
UID Length: 4 bytes
UID Value: 0x3A 0xDE 0x4D 0x02
我不想显示所有这些数据,我只想要UID值:所以我的最终结果是“ UID值:0x3A 0xDE 0x4D 0x02”或卡的UID并非其他数据
下一步,我需要帮助,因为我一无所知,请使用UID值删除空格,以便其单个字符串删除其名称并删除0x,这样它看起来像“ 3ADE4D02”,然后运行一个名为该字符串的sh文件,以便它将运行3ADE4D02.sh
TL:DR我想从串行连接中获取UID并打开一个名为该UID的sh文件
有任何想法吗?
1楼
我假设您的串行读取工作正常,所以我将仅处理第二部分。
for line in serialport.readline():
if "UID Value:" in line:
filename = ''.join([word[2:] if word.startswith('0x') else '' for word in line.split()])+'.sh'
然后,假设您知道filedir是什么,则可以使用os.system(filedir+filename)
运行sh文件。
编辑:确保具有line.split()
而不是列表理解中的line
,我意识到字符串遍历每个字母,而不是每个单词。