打印Pi从串行连接获取的所选数据,然后打开名为该数据的文件

时间:2015-10-21 19:45:25

标签: python arduino rfid nfc

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 个答案:

答案 0 :(得分:0)

我假设您的序列读取工作正常,所以我只处理第二部分。

The u option must have a non-empty value.
The password must have a non-empty value.

然后您可以使用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' 来运行sh文件,假设您知道该文件是什么。

编辑:确保在列表理解中有os.system(filedir+filename)而不是line.split(),我意识到字符串遍历每个字母,而不是每个字。