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