编码传递了serial.write python的参数

时间:2013-05-01 10:57:48

标签: python serial-port xbee

我试图通过xbee从pc发送一些数据到arduino。

我有一个测试数据包,我知道它构建得很好:

7E 00 7D 33 10 01 00 7D 33 A2 00 40 69 76 DD FF FE 00 00 01 52 B8 DA 41 1A

如果我使用:

ser.write(b'\x7E\x00\x7D\x33\x10\x01\x00\x7D\x33\xA2\x00\x40\x69\x76\xDD\xFF\xFE\x00\x00\x01\x52\xB8\xDA\x41\x1A')

我的数据包到达arduino。

但是现在我想通过命令行传递这个数据包。类似的东西:

python test.py '\x7E\x00\x7D\x33\x10\x01\x00\x7D\x33\xA2\x00\x40\x69\x76\xDD\xFF\xFE\x00\x00\x01\x52\xB8\xDA\x41\x1A'

能够通过这种方式每次都能更改数据。

我尝试过:

ser.write(sys.argv[1])
ser.write(sys.argv[1].encode('ascii'))

其他尝试但总是失败。

关于如何传递数据的任何想法?我认为这个问题与ser.write中的初始b有关...

我使用的是python 2.6或2.7 ...不是3。

1 个答案:

答案 0 :(得分:1)

这有效,但我觉得有一个更好的解决方案(有;见;编辑)

import ast
import sys

ser.write(ast.literal_eval("'{0}'".format(sys.argv[1])))

我们使用ast模块中的安全literal_eval来将字符串"'\x7E\x00\x7D...'"作为python文字进行评估,从而获得我们想要的内容。

编辑:啊 - 哈!找到更好的解决方案here

ser.write(sys.argv[1].decode("string-escape"))