检索从while语句返回的最终值

时间:2016-04-12 06:49:33

标签: python

我对python有点新意,我正在努力完成一项任务。

我想要实现的目标

我有这个代码从while循环中的一个线程收集GPS数据,我将这些数据发布到我的网络服务器。

问题

这里的问题是,在第一次运行时,纬度/经度总是为零,之后是正确的值。 while循环从5-10开始随机抽取gps坐标,它们都写在我的数据库中。

这是不正确的行为,因为我只想在任何时间点将一个结果实例写入数据库。我尝试在while循环中放入一个IF语句,说“如果latitude> 0将结果上传到数据库并且中断,则继续循环,但我似乎得到了错误的语法。

正如您所看到的那样,发布到我的数据库的代码位于while循环中,所以

try:  
    gpsp.start() # start it up
    print ' GPS'
    while True:


      print ' GPS reading'
      print 'latitude    ' , gpsd.fix.latitude
      print 'longitude   ' , gpsd.fix.longitude

      if gpsd.fix.latitude > 0:
        payload={'id':"P8",'lat':gpsd.fix.latitude,'lon':gpsd.fix.longitude}
      r= requests.post("http://my-server.com/Pi/Loc.php",data=payload)
      break
      elif gpsd.fix.latutde=0:


except (KeyboardInterrupt, SystemExit): #when you press ctrl+c
    print "\nKilling Thread..."
    gpsp.running = False
    gpsp.join() # wait for the thread to finish what it's doing
  print "Done.\nExiting."

任何帮助都将不胜感激。

我的问题不是“捕获”坐标,但我正在寻找帮助纠正语法只记录一条记录,我知道我所显示的代码有点不正确,这正是我所拥有的现在

这是运行代码的结果(我修复了缩进并删除了if)。实际上有更多的行,但我为了简单起见删除了它们。 我只是想找到一种方法来选择最后一个到我的网络服务器

 GPS
 GPS reading
latitude     0.0
longitude    0.0
 GPS reading
latitude     **.292548333
longitude    **.379363333
 GPS reading
latitude     **.292548333
longitude    **.379363333
 GPS reading
latitude     **.292546667
longitude    **.379365
 GPS reading
latitude     **.292546667
longitude    **.379365
 GPS reading
latitude     **.292546667
longitude    **.379365
 GPS reading
latitude     **.292546667
longitude    **.379365

 GPS reading
latitude     **.292503333
longitude    **.379376667
 GPS reading
latitude     **.292498333
longitude    **.379376667

2 个答案:

答案 0 :(得分:0)

如果您只想写一个结果,请更改循环条件:

try:
   gpsp.start()
except SomethingHere:
   print('Oops, GPS failed!')
   sys.exit()

while not gpsp.fix.latitude:
   time.sleep(4) # Pause till the GPS has obtained a fix

lat = gpsp.fix.latitude
lon = gpsp.fix.longitude

payload = {'vehic':"PJ048",'lat':lat,'lon':lon}

r = requests.post("http://my-server.com/Pi/Loc.php",data=payload)
r.raise_for_status()

答案 1 :(得分:0)

对于下一个问题(运行多个脚本),无需更改服务器,您可以删除CRON条目,并从/etc/init.d中的服务运行它。 在循环时永远添加delay()方法和另一个方法:

try:
   gpsp.start()
except SomethingHere:
   print('Oops, GPS failed!')
   sys.exit()

def delay():
    time.sleep(60) # sleep 60 seconds


while True: 

    while not gpsp.fix.latitude:
       time.sleep(4) # Pause till the GPS has obtained a fix

    lat = gpsp.fix.latitude
    lon = gpsp.fix.longitude

    payload = {'vehic':"PJ048",'lat':lat,'lon':lon}

    r = requests.post("http://my-server.com/Pi/Loc.php",data=payload)
    r.raise_for_status()
    delay()