Клиентский SQL на Python и crontab - PullRequest
0 голосов
/ 24 июня 2018

У меня есть несколько скриптов на Python, которые выполняются crontab на Raspbian. Я использую библиотеку MySQLdb для запроса в локальной сети.

Все сценарии работают нормально, если я запускаю их напрямую, через Python-IDLE или в консоли. Но если они запускаются cron, те, кто просто выполняет запросы INSERT, работают, а те, кто выполняет запрос SELECT, не работают.

Я не нашел четкого решения, но кажется, что crontab не выполняет ту же конфигурацию клиента SQL, что и пользователь. Может быть, я должен изменить путь перед всем запросом? (ищите "./my.cnf"?

протестировано с библиотеками MySQLdb и PyMySQL

#! /usr/bin/python
# -*- coding: utf-8 -*-

# importations  
import os
import time
import sys
import pymysql as sql  # or MySQLdb as...
from os import path as os_path

#-----------------------------------------------------------------#
#  constants : use your own values / utilisez vos propres valeurs #
#-----------------------------------------------------------------#
PATH_THERM = "/home/pi/Documents/" #path to this script
DB_SERVER ='192.168.0.59'       # MySQL : IP server 
DB_USER='user'                    # MySQL : user
DB_PWD='password'              # MySQL : password
DB_BASE='capteurs'              # MySQL : database name

def log(texte):
    datation = time.strftime('%d-%m-%Y %H:%M:%S')

    logue = open('log_test.txt','a')
    txt = "\n" + datation + "\t" + texte
    txt = txt.encode('utf-8')
    logue.write(txt)
    logue.close()

def query_temp():
    datebuff = time.strftime('%d-%m-%Y')

    db = sql.connect(DB_SERVER, DB_USER, DB_PWD, DB_BASE)
    cursor = db.cursor()
    cursor.execute("""SELECT sonde2,date FROM `PiTemp` ORDER BY date DESC LIMIT 0, 1""")
    rows = cursor.fetchall()
    print datebuff, u" : Dernière température de l'eau :", rows[0][0], u"°C"
    log(u"lecture température SQL - ok")

    a = rows[0][0]
    b =  rows[0][1]
    return (a, b)


#----------------------------------------------------------#
#             principal code                               #
#----------------------------------------------------------#

PATH=os_path.abspath(os_path.split(__file__)[0])
os.chdir(PATH)
log('start')
log(PATH)
txt = str(query_temp()[0])
log(txt)

crontab:

*/1 * * * * python /home/pi/Documents/180623_test.py

1 Ответ

0 голосов
/ 25 июня 2018

Обнаружена причина неудачи, печать, переданная cron, не кодирует / не декодирует так же, как консоль (! ??).

... print (u "Alerte, tous à poil!") UnicodeEncodeDecode Ошибка!

Странно, похоже, что cron не кодирует / декодирует так же, как пользователь .... (!?)

Решено без латинских символов при печати или с печатью, переданной попыткой / за исключением ...

...