python中的request()似乎阻止了我想在我的代码中发送的变量的更新

时间:2016-07-19 02:28:27

标签: python python-2.7 urllib httpconnection httplib

所以我有这个代码,它不断地通过RF接收器接收数据。

key = 'my api key'
ser = serial.Serial('/dev/ttyUSB0',9600)

def rfWaterLevel():
    rfWaterLevelArray = ser.readline().strip().split()
    if len(rfWaterLevelArray) == 5:
         rfWaterLevelVal = float(rfWaterLevelArray[4])
         params = urllib.urlencode({'field1':rfWaterLevelVal, 'key':key})
         headers = {"Content-typZZe" : "application/x-www-form-urlencoded","Accept":"text/plain"}
         conn = httplib.HTTPConnection("api.thingspeak.com:80")
         conn.request("POST", "/update", params, headers)
         response = conn.getresponse()
         data = response.read()
         conn.close()
while True:
    try:
        rfWaterLevel()
        time.sleep(3)
    except KeyboardInterrupt:
        print "caught keyboard interrupt"
        sys.exit()

在发送数据和更新事务方面,它的工作方式。但是有一个很大的缺陷。正在发送的rfWaterLevelVal变量根本不会根据接收的数据进行更新。因此,如果最初接收到的rf数据为30,从而使rfWaterLevelVal为30,那么下一轮数据为40,发送的数据仍然停留在30。

我试图逐行注释掉代码,看看是什么让这种情况发生了,好像这样"冻结"在更新rfWaterLevelArray& rfWaterLevelVal变量出现在行...

 conn.request("POST", "/update", params, headers)

在运行此代码一次后,为什么我的rfWaterLevelArray或rfWaterLevelVal变量根本没有更新的任何帮助?

提前致谢!

1 个答案:

答案 0 :(得分:0)

rfWaterLevel的值未获得更新,因为您没有更新它。每次调用rfWaterLevel(函数)时都执行以下语句:

rfWaterLevel = float(rfWaterLevelTemp[4])

然后你用这个值做了一些事情,但是你没有显示rfWaterLevelTemp[4]的来源。除非它在某个地方被改变,否则它将永远是相同的。您将一遍又一遍地发送相同的值。也许你打算写:

rfWaterLevel = float(rfWaterLevelArray[4])

我认为会发送你从串口获得的最新数据。