在我的应用程序中,我想通过ServiceManager停止并启动ServiceManager服务。我正在使用Choregraphe和python。我尝试过不同的方法来启动ServiceManager,但它们都不起作用。有办法这样做吗?
编辑:
我已经试过self.sm = session.service('ServiceManager')了,但没有起作用。这个想法是在应用程序一开始就停止ALTactileGesture:
(1) ServiceManager.stopService('ALTactileGesture') (见这)
并在应用程序结束之前启动/重新启动ALTactileGesture:
(2) ServiceManager.startService('ALTactileGesture')
我的问题是如何到达ServiceManager,以便我可以使用(1)和(2)?
发布于 2017-12-29 13:43:31
您必须理解,在NAOqi中,“服务”一词实际上意味着两种不同的东西。请参阅这里的解释
NAOqi services (也称为“模块”),它公开一个API并注册到ServiceDirectory。你可以打电话给他们,订阅他们的信号,等等。 systemd服务是打包在应用程序包中的独立可执行文件,在它的清单中用标记声明。这些都是由ALServiceManager管理的,它可以启动和停止它们(它们将有自己的流程)。为了清晰起见,这些文件在这个文档中被称为“可执行文件”。 这两者之间的混淆增加了这样一个事实,即公共模式是编写一个可执行文件,其唯一目的是运行一个NAOqi服务,有时以相同的名称标识两者(例如,两者都被称为“ALFuchsiaBallTracker”)。
这里的问题是,NAOqi服务ALTactileGesture是由ID ALTactileGesture-serv下注册的可执行文件运行的。所以你需要做
ALServiceManager.stop("ALTactileGesture-serv")(我刚测试过,效果很好)
(编辑)顺便说一句,我不确定是否真的停止并启动ALTactileGesture是做您想要做的事情的最佳方式(在我看来,这有点麻烦),但是如果您想这样做,这就是方法:)
发布于 2017-11-10 17:45:33
只需在机器人外壳(旧式代理连接)中试一试:
$ python
import naoqi
s = naoqi.ALProxy("ALServiceManager", "localhost", 9559 )
s.stopService('ALTactileGesture')
>>> False
s.startService('ALTactileGesture')
>>> False # (a bit weird, but ...)所以我认为它并不完全起作用,但至少您可以按要求连接到ServiceManager .
https://stackoverflow.com/questions/47181507
复制相似问题