将标志从python脚本传递到另一个

时间:2018-11-30 18:16:02

标签: python flask

你好,如果我在一个脚本中有一个标志,是否可以将实时更改传递给其他脚本?我的意思是,例如,我写了这个脚本。我们将其命名为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 :(得分:0)

因此,由于无论如何进行轮询,绝对最简单的方法是写入某种共享资源,例如文件。因此,script1向文件中写入了一些内容(可能是时间戳),script2不断轮询该文件以查看其是否已更改。

让我警告您,如果您想要提高性能或效率,就像依赖文件系统的任何内容一样,这是一个糟糕的解决方案。

答案 1 :(得分:0)

为什么不只是将数据发布到flask应用程序,而是尝试将数据从一个脚本传递到另一个脚本?

#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)