2011-02-15 70 views
0
from brisa.core.reactors import install_default_reactor 

reactor = install_default_reactor() 
print reactor 

from brisa.core.threaded_call import run_async_function 

from brisa.upnp.control_point.control_point import ControlPoint 

from datetime import datetime 

service = ('u', 'urn:schemas-upnp-org:service:SwitchPower:1') 

binary_light_type = 'urn:schemas-upnp-org:device:BinaryLight:1' 

def on_new_device(dev): 

    print 'Got new device:', dev.udn 

    print "Type 'list' to see the whole list" 

    if not dev: 
      return 

def get_switch_service(device): 

    return device.services[service[1]] 

def create_control_point(): 

    c = ControlPoint() 

    print "hello" 

    c.subscribe('new_device_event', on_new_device) 

    print "c" 

    return c 

def main(): 

    """ Main loop iteration receiving input commands. 

    """ 

    print "hell" 

    c = create_control_point() 
    print "helllo" 

    c.start() 

    run_async_function(_handle_cmds, (c,)) 

    reactor.add_after_stop_func(c.stop) 

    reactor.main() 

def _exit(c): 

    """ Stops the _handle_cmds loop 

    """ 

    global running_handle_cmds 

    running_handle_cmds = False 

def _search(c): 

    """ Start searching for devices of type upnp:rootdevice and repeat 

    search every 600 seconds (UPnP default) 

    """ 

    c.start_search(600, 'upnp:rootdevice') 


def _get_status(c): 

    """ Gets the binary light status and print if it's on or off. 

    """ 

    try: 

     service = get_switch_service(c.current_server) 

     status_response = service.GetStatus() 

     if status_response['ResultStatus'] == '1': 

      print 'Binary light status is on' 

     else: 

      print 'Binary light status is off' 

    except Exception, e: 

     if not hasattr(c, 'current_server') or not c.current_server: 

      print 'BinaryLight device not set.Please use set_light <n>' 

     else: 

      print 'Error in get_status():', e 

def _get_target(c): 

    """ Gets the binary light target and print if it's on or off. 

    """ 

    try: 

     service = get_switch_service(c.current_server) 

     status_response = service.GetTarget() 

     if status_response['RetTargetValue'] == '1': 

      print 'Binary light target is on' 

     else: 

      print 'Binary light target is off' 

    except Exception, e: 

     if not hasattr(c, 'current_server') or not c.current_server: 

      print 'BinaryLight device not set.Please use set_light <n>' 

     else: 

      print 'Error in get_target():', e 

def _stop(c): 

    """ Stop searching 

    """ 

    c.stop_search() 

def _list_devices(c): 

    """ Lists the devices that are in network. 

    """ 

    k = 0 

    for d in c.get_devices().values(): 

     print 'Device no.:', k 

     print 'UDN:', d.udn 

     print 'Name:', d.friendly_name 

     print 'Device type:', d.device_type 

     print 'Services:', d.services.keys() # Only print services name 

     print 

     k += 1 

if __name__ == '__main__': 
    print "hello" 

    main() 

我得到的输出:程序执行不完全,在中途停止

ANKIT @ Ubuntu的:〜/桌面$蟒蛇controlpt.py

<brisa.core.reactors.glib2.GLib2Reactor object at 0x88c3e0c> 
hello 
hell 

这是不会的行c = create_control_point。这是为什么?请指导我删除此错误。

+0

我建议您打印更多有用的评论,例如“Finished create_control_point”和“Inside create_control_point”,而不是使用不同的ls数来表示“Hello”。 – mgiuca 2011-02-15 02:13:59

回答

0

我不熟悉这个'brisa'库。我会收集,出于某种原因,ControlPoint构造函数正在退出整个程序使用sys.exit()(或正在调用一些等效的C代码)。

在命令行运行程序,就像这样:

$ python 
>>> import controlpt 
>>> controlpt.main() 

那么你应该能够看到,如果它实际上退出的全过程。如果它让你回到>>>提示符,那么我不知道发生了什么。但是如果它完全退出Python,这意味着那个构造函数正在退出。

+0

是的......你说得对,控制点构造函数正在退出。我应该怎么做才对?您可以在这里看到Brisa图书馆:http://brisa.garage.maemo.org/apidoc/index.html..plz可以为我提供建议。 – user616782 2011-02-16 18:33:22