为什么在os.system中可以使用serial.tools但不是没有?

时间:2015-01-09 07:44:27

标签: python pyserial

我正在努力让Python从微控制器读取,微控制器每秒通过COM端口发送一个短状态字符串。

由于μC(最好不要说哪个)在USB实现上有一个相当狡猾的串口,我需要定期检查COM端口是否存在。

我可以使用os.system('python -m serial.tools.list_ports')返回Eclipse控制台中的端口。到目前为止一切都很好。

我现在想进入下一步并将其输出传递给变量并进一步处理 - 这就是我失去的地方。我原以为我可以使用例如:s = serial.tools.list_ports进行分配,但在此上下文中toolsserial不可用。

为什么会这样?

1 个答案:

答案 0 :(得分:2)

如果您只导入serial,则无法直接访问serial.tools,因为toolsserial中的另一个模块(实际上是子包)包。 serial包不会为您导入它。有些软件包会自动导入它们包含的部分或全部模块和子包,但这种行为需要由软件包开发人员专门编写,除非你自己导入内部模块,否则不是由Python完成的。

尝试显式导入您要使用的模块:

import serial.tools.list_ports
serial.tools.list_ports.main()

main函数实现了运行python -m serial.tools.list_ports时看到的行为。我通过查看Sourceforge上的PySerial subversion repository找到了它的名字。