Передать флаг из скрипта Python другому - PullRequest
0 голосов
/ 30 ноября 2018

Здравствуйте, если у меня есть флаг в одном скрипте, возможно ли передать изменения в реальном времени другим?Я имею в виду, что, например, я написал этот сценарий.давайте назовем его script1.py, который считывает данные из последовательной связи и сохраняет их в файл .txt.Когда data, который я получаю, равен '0', я бы хотел передать flag sent_json на script2.Поэтому, когда script2 получает триггер, отправьте данные.Какие-либо предложения ?

while True:
            try :
                a = ser.readline()
                timestamped = str(datetime.datetime.now())
                suma = timestamped + "\t " + a.decode('utf-8')
                f = open("current_data.txt", 'a')
                f.write(suma)
                if (a.decode().strip() == '0'):
                    sent_json = True
                    saveData()
                    print("New data is saved!")

                sent_json = False
            except :
                print("Unexpected error: ")
                break

и у меня есть другой скрипт, назовите его script2.py, в котором основное приложение Flask:

import sqlite3, json
from flask import Flask, render_template, request
from serialNumber_id import serial_number

import sys

app = Flask(__name__)

@app.route("/")

def PostData():
    ''' Connect to DB, set the temperature to 2 decimal float, POST Data to DB'''

    with open("data.json") as dataFile:
        data = json.load(dataFile)


    for key, value in data.items():
        temperature = "{0:.2f}".format(float(value['data']))
        date = value['date']
        conn = sqlite3.connect('sensordata.db')
        cur = conn.cursor()
        cur.execute( """INSERT INTO Temperature_data(temperature, currentdat, currenttime, device)  VALUES ((?) , (?), time("now"), (?))""", (temperature, date, serial_number))
        conn.commit()

open('data.json', 'w').close()

####### 
  Code something like 

    while True:
          if sent_json : 
             do something
          else:
              do something

# if __name__ == "__main__":
#    app.run(host='0.0.0.0', port=8181, debug=True)

Обратите внимание, что я пробовал в script2

from script1 import sent_json

Также сценарии находятся в той же папке.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Почему бы просто НЕ ПОСТАВИТЬ данные в ваше приложение фляги вместо того, чтобы пытаться передать их от сценария к сценарию?

#script1.py
import requests
my_data = {'name':'FooBar'}
requests.post('http://localhost:3000/', json=data)

#script2.py
from flask import request
...
@app.route("/", methods=["POST"])
def PostData():
    data = request.get_json(force=True)
    print(data) 
    # {'name':'FooBar'}
    do_something(data)
0 голосов
/ 30 ноября 2018

Таким образом, самая простая вещь, которую нужно сделать, поскольку вы все равно опрашиваете, - это записать в какой-то общий ресурс, например, в файл.Поэтому script1 записывает что-то, возможно, временную метку в файл, и script2 постоянно опрашивает этот файл, чтобы проверить, не изменился ли он.

Позвольте мне предупредить вас, что это, как и все, что зависит отфайловая система, это ужасное решение, если вы хотите производительность или эффективность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...