我正在开发一个工作项目,为了让它工作,我需要通过串口捕获数据,将其放入字符串形式,并在字符串中查找两个关键字。我正在寻找的两个词是“PASS”和“2X400MHz”。
在工作中我们有一个自动RAM测试器,我想自动化使用Arduino传递的RAM的排序过程。为此,我需要通过串口监视RAM测试仪发出的数据,并查看被测RAM的速度以及测试结果(PASS或FAIL)。一旦我创建了一个包含必要信息的字符串,我将python写入arduino over serial,arduino将负责所有的排序。
我陷入困境的原因是什么使得这么困难的是串口上的数据根据RAM是否通过或在测试结束的中途或接近失败而变化。对于2GB模块,测试通常为52秒,对于1GB模块,测试通常为32秒。当模块测试时,串行线路上的数据是正在运行的测试的名称,以及当测试结束(失败或通过)模块的SPD芯片上的所有数据时,计数器按秒计数的时间被转储到串行线上以及“PASS”或“FAIL”字样。计时器计数器使得每个测试的数据量取决于它失败的位置,这就是为什么我想只创建一个SPD数据的字符串,因为它只包含对我有意义的数据。
我使用了一个串行监控程序来捕获一个样本来显示我正在使用的数据。我感兴趣的SPD数据接近底部,其上面的其余数据只是计时器。除了SPD数据(速度,配置,序列号)之外,底部附近的数据总是相同的。我希望有一种方法可以让python使用一个单词,它始终显示在SPD数据之前和之后开始和停止创建字符串,这样字符串将只是SPD数据并将排除计数器数据。
..Waiting for Handler Start ....Åþ....[ Esc. ]Åþe.ÅþE.ÅþE.Åþ.*..L001: wk_addr [00:00]Åþ....[Cancel]ÅþA'Åþ.*..L001: wk_data [00:00]Åþ....[Cancel]ÅþA'Åþ.*..L001: Mats [00:01]Åþ....[Cancel]ÅþA'Åþ...![00:02]Åþ...![00:02]Åþ...![00:03]Åþ...![00:03]Åþ...![00:03]Åþ...![00:04]Åþ...![00:05]Åþ...![00:05]Åþ...![00:06]Åþ...![00:06]Åþ...![00:07]Åþ...![00:07]Åþ...![00:08]Åþ...![00:09]Åþ...![00:09]Åþ...![00:10]Åþ.*..L001: Mar_X [00:10]Åþ....[Cancel]ÅþA'Åþ...![00:11]Åþ...![00:11]Åþ...![00:12]Åþ...![00:12]Åþ...![00:12]Åþ...![00:13]Åþ...![00:14]Åþ...![00:14]Åþ...![00:15]Åþ...![00:15]Åþ...![00:16]Åþ...![00:16]Åþ...![00:17]Åþ...![00:18]Åþ...![00:18]Åþ...![00:19]Åþ...![00:19]Åþ...![00:20]Åþ...![00:20]Åþ...![00:21]Åþ.*..L001: Mar_C [00:21]Åþ....[Cancel]ÅþA'Åþ...![00:22]Åþ...![00:22]Åþ...![00:23]Åþ...![00:23]Åþ...![00:24]Åþ...![00:24]Åþ...![00:25]Åþ...![00:25]Åþ...![00:26]Åþ...![00:26]Åþ...![00:27]Åþ...![00:28]Åþ...![00:28]Åþ...![00:29]Åþ...![00:29]Åþ...![00:30]Åþ...![00:31]Åþ...![00:31]Åþ...![00:32]Åþ...![00:32]Åþ...![00:32]Åþ...![00:33]Åþ...![00:34]Åþ...![00:34]Åþ...![00:35]Åþ...![00:35]Åþ...![00:36]Åþ...![00:37]Åþ...![00:37]Åþ...![00:37]Åþ...![00:38]Åþ...![00:39]Åþ.*..L001: Mar_Y [00:39]Åþ....[Cancel]ÅþA'Åþ...![00:39]Åþ...![00:40]Åþ...![00:40]Åþ...![00:41]Åþ...![00:41]Åþ...![00:42]Åþ...![00:42]Åþ...![00:43]Åþ...![00:43]Åþ...![00:44]Åþ...![00:44]Åþ...![00:45]Åþ...![00:45]Åþ...![00:46]Åþ...![00:46]Åþ...![00:47]Åþ...![00:47]Åþ...![00:48]Åþ...![00:48]Åþ...![00:49]Åþ...![00:49]Åþ...![00:50]Åþ...![00:50]Åþ...![00:51]Åþ...![00:51]Åþ...![00:52]Åþ...![00:52]Åþ...![00:53]Åþe.Åþ}...ÅþE.Åþa¡ÅþD.Åþ"0.Module..: ****DDR2 256Mx72 2GB 2R(8)@2x400MHZ 1.8V.Åþ"...(Tested at 2x400MHz).Åþ".Addr.(rowxcol.).: 14 x 10.Åþ".Data (rankxbit).: 2 x 72.Åþ".Internal Banks.: 8.Åþ""Burst.: Mode=Sequential, Length=8.Åþ"*AC parameters.: CL=5, AL=0, Trcd=5, Trp=5.Åþ".S/N from SPD.: a128f4f3.Åþ".Test Loop #.: 1.Åþ"..## PASS: Loop 1 ##.Åþ"..Elapsed Time.: 00:00:53.448.Åþa¢Åþc.............H..ÿÿÿÿ"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ...s-(U.?€.....".. Åþ@.ÅþE.Åþ....**PASS - L001 @2x400MHZÅþ...![00:53]Åþ....Transmit Results ...Åþa¡ÅþD.Åþ"0.Module..: DDR2 256Mx72 2GB 2R(8)@2x400MHZ 1.8V.Åþ"...(Tested at 2x400MHz).Åþ".Addr.(rowxcol.).: 14 x 10.Åþ".Data (rankxbit).: 2 x 72.Åþ".Internal Banks.: 8.Åþ""Burst.: Mode=Sequential, Length=8.Åþ"*AC parameters.: CL=5, AL=0, Trcd=5, Trp=5.Åþ".S/N from SPD.: .Åþ".Test Loop #.: 1.Åþ"..## PASS: Loop 1 ##.Åþ"..Elapsed Time.: 00:00:53.448.Åþa¢Åþ@.Åþ.** ..**
答案 0 :(得分:0)
似乎你要找的是String的.find()方法。使用它和Python的字符串切片的精彩实用程序,您可以轻松完成您所追求的目标。
举个例子:
# Our string with the text that we're after.
blob = "filler text filler text BEGIN This is what we're after. END filler text."
# Use .find() to find the first occurrence of two given substrings.
start = blob.find("BEGIN")
end = blob.find("END")
# Our result will be: 'BEGIN This is what we're after. '
result = blob[start:end]
如果你想更进一步,你可以将start()的len()值添加到字符串切片中,以防止添加BEGIN并使用blob.strip()删除前导和尾随空格
希望有所帮助。