从网络检索响应并使用Python进行打印

时间:2013-01-08 15:42:35

标签: python tornado

我有问题。 我在Python(Tornado web服务器)中编写了这部分代码:

if command == 'RESTARTNWK':
        op_group = "A3"
        op_code = "E0"
        netid = hextransform(int(nid), 16)
        packet_meta = "*%s;%s;%s;#"
        pkt_len = hextransform(0, 2)

        packet = packet_meta % (op_group, op_code, pkt_len)
        packet = packet.upper()

        op_group_hex=0xA3
        op_code_hex=0xE0

        cmdjson = packet2json(op_group_hex,op_code_hex, packet)

    mynet_type="ztc"

    print("\t\t " + packet + "\n")

    #TODO : -write command into db  
    ts = datetime.datetime.now().isoformat()
    mynet_type ="ztc" 
    self.lock_tables("write", ['confcommands'])
self.db.execute("INSERT INTO confcommands (network_id, ntype, timestamp, command) \
                              VALUES (%s,%s,%s,%s)", nid, mynet_type, ts, cmdjson)
    self.unlock_tables();

    # TODO: - open the /tmp/iztc file in append mode
    cmdfile = open('/tmp/iztc', 'a')
    #       - acquire a lock  "only for the DB case, it's easier"
    #       - write the packet 
    cmdfile.write(netid + "\t"+ mynet_type + "\t"+ ts + "\t"+  cmdjson +"\n");
    #       - release the lock "only for the DB case, it's easier"
    #       - close the file
    cmdfile.close()

    if command == 'RESTARTNWK':
        opcodegroupr = "A4"
        opcoder = "E0"


    #Code for retrieving the MAC address of the node
    como_url = "".join(['http://', options.como_address, ':', options.como_port,
                        '/', ztc_config, '?netid=', netid,
                        '&opcode_group=', opcodegroupr, 
                        '&opcode=', opcoder, '&start=-5m&end=-1s'])
    http_client = AsyncHTTPClient()
    response = yield tornado.gen.Task(http_client.fetch, como_url)

    ret = {}
    if response.error:
        ret['error'] = 'Error while retrieving unregistered sensors'
    else:
        for line in response.body.split("\n"):
            if line != "": 
                value = int(line.split(" ")[6])

    ret['response'] = value
    self.write(tornado.escape.json_encode(ret))
    self.finish()

在此代码中,我从用户收到restart network命令。在一些设置之后,我在名为confcommands的db表中编写相对命令。服务器将读取此命令,并将重新启动信号发送到指定的网络。

在此之后,如果一切正常,网络会重新发送响应。我通过http请求向我的服务器(como)读取此响应,并等待异步响应。

在网络写入响应的地方,我必须在数据包中找到它。值响应是第六个元素。该分组的其他信息是opgroup和操作码,响应的网络和其他信息。

然后我为用户写了回复。

我不知道这段代码是否正确......可以解决这个问题吗?结构似乎对我来说......

谢谢大家的任何建议!

0 个答案:

没有答案