我正在努力让Python从微控制器读取,微控制器每秒通过COM端口发送一个短状态字符串。
由于μC(最好不要说哪个)在USB实现上有一个相当狡猾的串口,我需要定期检查COM端口是否存在。
我可以使用os.system('python -m serial.tools.list_ports')
返回Eclipse控制台中的端口。到目前为止一切都很好。
我现在想进入下一步并将其输出传递给变量并进一步处理 - 这就是我失去的地方。我原以为我可以使用例如:s = serial.tools.list_ports
进行分配,但在此上下文中tools
内serial
不可用。
为什么会这样?
答案 0 :(得分:2)
如果您只导入serial
,则无法直接访问serial.tools
,因为tools
是serial
中的另一个模块(实际上是子包)包。 serial
包不会为您导入它。有些软件包会自动导入它们包含的部分或全部模块和子包,但这种行为需要由软件包开发人员专门编写,除非你自己导入内部模块,否则不是由Python完成的。
尝试显式导入您要使用的模块:
import serial.tools.list_ports
serial.tools.list_ports.main()
main
函数实现了运行python -m serial.tools.list_ports
时看到的行为。我通过查看Sourceforge上的PySerial subversion repository找到了它的名字。