Python守护程序在urlopen

时间:2016-04-09 10:40:05

标签: python raspberry-pi urllib2 daemon urllib

我从init.d脚本启动了python守护程序。守护进程可选择通过REST接口从服务器读取id:s数组。否则我使用一个预定义的id:s。

数组
logger.info("BehovsBoBoxen control system: bbb_domoticz.py starting up")


if DOMOTICZ_IN or DOMOTICZ_OUT:
#
# build authenticate string to  access Domoticz server
#

  p = urllib2.HTTPPasswordMgrWithDefaultRealm()
  p.add_password(None, DOMOTICZ_URL, USERNAME, PASSWORD)

  handler = urllib2.HTTPBasicAuthHandler(p)
  opener = urllib2.build_opener(handler)
  urllib2.install_opener(opener)




  if DOMOTICZ_IN:
#
# Find all temperature sensors in Domoticz and populate sensors array
#
    url= "http://"+DOMOTICZ_URL+"/json.htm?type=devices&filter=temp&used=true&order=Name"
    logger.debug('Reading from %s',url)
    response=urllib2.urlopen(url)
    data=json.loads(response.read())
    logger.debug('Response is %s',json.dumps(data, indent=4, sort_keys=True))
    for i in range(len(data["result"])):
      a=data["result"][i]["Description"]
      ini=a.find('%room')
      if ini != -1:
         ini=ini+6
         rIndex=int(a[ini:])

      logger.info('Configure room id %s with Domoticz sensor idx: %s', rIndex,  data["result"][i]["idx"])

      sensors[rIndex]=data["result"][i]["idx"]

守护程序在启动时从init.d脚本启动。如果我使用预定义id:s的选项,即我不使用REST接口,一切都很完美。守护进程在启动时启动,我可以使用命令

停止并重新启动守护进程

sudo service start / stop / restart

但是,如果我使用其他选项(从服务器读取id:s),则守护程序不会在启动时启动。在日志文件中,我找到一行(“... bbb_domoticz.py启动”)。 Henze,守护进程在此之后默默地退出,可能是在以下urllib2调用之一中。以下logger.debug('Reading ...')未显示在日志文件中。

但奇怪的是,如果我在主目录中使用init.d脚本的副本手动启动守护程序,守护程序就会启动。如果我从/etc/init.d运行init.d脚本,那么deamon会立即退出,就像它在启动时一样。但是如果使用我的主目录中的脚本启动守护进程,我可以继续使用service命令启动/停止/重启。

因此,除非我已经设法从我的主目录启动守护程序,否则我从中取出urllib2会出错。令我困惑的是,当守护进程退出时,我没有得到任何追溯或任何东西。

知道如何解决这个问题吗?

编辑:受到将记录添加到特定模块的答案的启发,我尝试将记录添加到urllib2。但是,我无法弄清楚如何让这个模块使用我的日志记录处理程序。对此有所帮助表示赞赏。

0 个答案:

没有答案