【问题标题】:Why can't this python code not be executed?为什么这个python代码不能执行?
【发布时间】:2019-01-09 01:46:52
【问题描述】:

一旦我运行这个包含一些 mysql 的 python 代码,我得到的只是三个更大或更小的符号(>>>)。任何帮助将非常感激! 我的代码包括尝试通过连接到我的树莓派 3 的 ds18b20 获取温度,并将该数据发送到我创建的 mysql 数据库中。

这里是 python/mysql 代码:

import os
import glob
import time
import MySQLdb
import datetime

i = datetime.datetime.now()

db = MySQLdb.connect(host = "127.0.0.1", user = "root", passwd = "test", db = "temp_pi")
cur = db.cursor()

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'

def read_temp_raw():
    f = open(device_file, 'r')
    lines = f.readlines()
    f.close()
    return lines

def read_temp():
    lines = read_temp_raw()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = read_temp_raw()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        temp_f = temp_c * 9.0 / 5.0 + 32.0
        return temp_c
    while True:
          print ("recording data into database(period = 5s.)....press ctrl+Z to stop!")

          valT = str(read_temp())

          year = str(i.year)
          month = str(i.month)
          day = str(i.day)
          date = day + "-" + month + "-" + year

          hour = str(i.hour)
          minute = str(i.minute)
          second = str(i.second)
          timestr = hour + ":" + minute + ":" + second

          try:
             cur.execute("""INSERT INTO TAB_CLASSROOM(temp_c,T_Date,T_Time) VALUES(%s,%s,%s)""",(valT,date,time))
             db.commit()
          except:
             db.rollback()

          time.sleep(10)

    cur.close()  
    db.close() 

【问题讨论】:

  • 当你从命令行像这样python something.py 运行它时?
  • 这是相当长的代码,您希望人们阅读。您应该 a) 包含有关如何运行代码的更多信息,包括您的操作系统,并且 b) 尽可能减少仍然存在问题的代码。
  • @aws_apprentice 当我在 python 模块中运行它时。
  • "@aws_apprentice 当我在 python 模块中运行它时。" - 请更具体一点,这是什么意思? Python 是一个可执行程序。它恰好在模块中运行代码。
  • @mdurant 好吧,我很抱歉。我的代码连接到 mysql db(第 9-10 行),通过我在描述中指定的传感器(12-35)读取温度,然后将它们发送到表(51-55)并最后关闭连接。

标签: python mysql phpmyadmin mysql-python


【解决方案1】:

您从未在该代码中运行过任何东西。您的大部分代码都在read_temp() 中,并且在其中的任何地方都没有调用它。 >>> 表示程序已结束并进入解释器模式。在它之后添加一些代码,让它按照你想要的方式工作。

【讨论】:

  • 如果你读到最后的 cur.execute 行,它就会被调用。我定义 ValT 说它是 read_temp()。那个功能就是把得到的温度插入到我的mysql表中。
  • 你还没有调用read_temp()...即使cur.execute在其中,它也不会运行,直到它周围的函数运行。
  • 我不确定我还能怎么打电话给read_temp()@GeeTransit
  • 最后调用。非常结束,没有缩进。那应该就好了。
  • 如果我将它添加到代码的最底部而没有缩进,我会得到invalid syntax。 @GeeTransit 我在最底部添加了read_temp(),我收到了刚刚向您展示的新错误。
【解决方案2】:

实际上,你并没有在运行任何东西。假设你这样做了

python myscript.py

python 将加载文件并运行它——这意味着逐行执行代码。你会发现函数之外的前几行只是简单地执行了。然后你定义了一些函数,但从不调用它们。

你应该添加

read_temp()

在脚本的末尾。

【讨论】:

  • 他也没有if __name__ == "__main__"
  • @mdurant 我确实在脚本末尾添加了该行,但我仍然没有得到任何响应代码执行的信息。
  • 我注意到 read_temp() 在 valT = str(read_temp()) 再次调用 read_temp - 所以你只是递归并且永远不会进入数据库插入。
  • @mdurant 好的。我究竟如何才能进入数据库插入?感谢您的帮助,非常感谢!
  • ...不要从 read_temp() 中调用 read_temp()?我们实际上并不知道您在这里想要达到什么目标,所以很难说。
猜你喜欢
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 2015-08-31
  • 1970-01-01
相关资源
最近更新 更多