Skip to main content
 首页 » 编程设计

python之使用 Pyro-nsd 时找不到 Pyro 名称服务器

2025年05月04日56EasonJim

我在运行 Wheezy 的树莓派上使用 Pyro4 和 Python 2.7

当我启动 Pyro 名称服务器时

pyro4-ns & 

或

python -m Pyro4.naming & 

我的代码按预期工作,没有任何错误。但是,当我使用以下命令启动 Pyro 名称服务器守护程序时

/etc/init.d/pyro-nsd start 

当我将 lamp_daemon.py 作为后台进程启动时

/home/pi/Wakeup-Lamp/lamp_daemon.py & 

我得到以下错误

File "/home/pi/Wakeup-Lamp/lamp_daemon.py", line 27, in
nameServer = Pyro4.locateNS()
File "/usr/local/lib/python2.7/dist-packages/Pyro4/naming.py", line 358, in locateNS
raise e
Pyro4.errors.NamingError: Failed to locate the nameserver

lamp_daemon.py代码为

#!/usr/bin/python 
 
from current_lamp_state import CurrentLampState 
from lamp_state import LampState 
from pwm import Pwm 
import Pyro4 
import Pyro.core 
import Pyro.naming 
 
class LampSwitch(Pyro.core.ObjBase): 
  __currentLampState = CurrentLampState() 
  __pwm = Pwm() 
 
  def get_lamp_state(self): 
    return self.__currentLampState.get() 
 
  def set_lamp_state(self, new_lamp_state): 
    self.__currentLampState.set(new_lamp_state) 
    self.__pwm.update() 
 
lampSwitch = LampSwitch() 
daemon = Pyro4.Daemon() 
nameServer = Pyro4.locateNS() 
uri = daemon.register(lampSwitch) 
nameServer.register("lamp.daemon", uri) 
daemon.requestLoop() 

我用谷歌搜索了很多,但似乎无法解决问题。有没有人知道我做错了什么?

请您参考如下方法:

如果服务器上的 pyro 版本与客户端不同,则无法找到名称服务器,这是检查 Pyro 版本的方法:

python -c "import Pyro4.constants as c; print(c.PROTOCOL_VERSION)"

如果不一样,请卸载pyro模块,重新安装。

当我按照上述步骤操作时,我遇到了类似的问题,该问题已得到解决。