我正在和我的实验室做一个机器人项目。(Github)大多数主要组件都已完成并记录在案。设置如下:
opstn。它有一个服务器,用于与机器人通信控制器位置。rpi。这两个人通过wifi进行通信,并有一个静态地址。raspberry pi有一个客户端程序,当它有时间时请求控制器位置,决定如何运行马达。该代码确实有效,但我们必须以一种比较长的方式运行它:
cd转换为kaginawa和python -m opstn,运行opstn/__main__.pycd进入kaginawa和python -m rpi,运行rpi/__main__.py我想知道如何正确地启动子模块。对于rpi/__main__.py,我考虑在__main__.py中提供两个功能(电机控制客户端和设备服务器),并使用multiprocessing来运行它们。实验似乎表明这是可行的。
不过,我想要做的是将我的目录压缩到一个可执行文件中,然后简单地使用./start_robot。这就是Makefile所做的,而且工作得很好。然而,无论我尝试什么,我似乎根本无法启动opstn。我也需要使用SSH,因为我需要用sudo启动sudo。我可能可以使用paramiko使用本答复来完成这个任务。
如果可能的话,我正在考虑使用os.uname()[1]来检查它是否在raspberry pi上,并启动rpi,否则就启动opstn。
tl;博士,如何从python包的根__main__.py启动包含__main__.py的子模块?
发布于 2015-01-16 18:30:34
项目中的toplevel目录不应该是Python包。它可能是一个带有setup.py的目录。
您不应该在package中使用cd。将您的zip放在PYTHONPATH中的某个地方(通过print(sys.path)检查),并使用绝对名称运行子模块,例如,运行:
$ python -m kaginawa.opstn运行kaginawa/opstn/__main__.py脚本或运行:
$ python -m kaginawa.rpi运行kaginawa/rpi/__main__.py。
如果您想选择在运行时运行什么,那么可以在kaginawa.opstn.main()或kaginawa.rpi.main()函数中调用kaginawa/__main__.py。然后运行它:
$ python -mkaginawa你可以直接运行拉链。
为了简化包含依赖项,可以使用PyInstaller、cx_Freeze捆绑代码。
https://stackoverflow.com/questions/27964993
复制相似问题