[英]How to Keep my script running in the background
我正在制作一个python脚本,该脚本从arduino发送的串行端口读取数据并将其插入数据库中。 我正在使用Java来制作图形用户界面的gui。 打开java gui时,我想让我的python脚本在后台运行,但是我想在java gui关闭后立即关闭python脚本。 以下是我的python代码,我尚未实现Java gui。
import serial, sqlite3
conn=sqlite3.connect("ProyectoFinal1.db")
c=conn.cursor()
ser = serial.Serial('COM5', 9600)
def tableCreate():
c.execute("CREATE TABLE Temperatura(ID INT,valor INT,Fecha TIMESTAMP)")
c.execute("CREATE TABLE Humedad(ID INT,valor INT,Fecha TIMESTAMP)")
def dataEntry(tabla,valor):
c.execute("INSERT INTO %(tabla)s (Fecha,valor) VALUES(CURRENT_TIMESTAMP,%(valor)s)"%{"tabla":tabla,"valor":valor})
conn.commit()
def serialRead():
ser = serial.Serial("/dev/ttyUSB0")
for data in ser.readline():
if data:
serial=data
return serial
def parse(toParse):
toParse=toParse.split(" ")
humidity=toParse[0]
temperature=toParse[1]
toParse=[humidity,temperature]
return toParse
while True:
temperatura=parse(ser.readline())[1]
humedad=parse(ser.readline())[0]
dataEntry("Temperatura",temperatura)
dataEntry("Humedad",humedad)
print (humedad)
print (temperatura)
找出父进程是否退出的一种跨平台方法是打开进程之间的管道,然后等待其关闭。 下面的示例在子进程中启动一个线程,该线程等待stdin关闭,然后关闭串行端口,然后退出主循环的readline。
为此,父级Java脚本需要打开一个管道并将其用于python进程stdin
。 我不知道该怎么做,但是由于您没有显示Java代码,所以我假装这就是我不包括它的原因。 这样做还有一个好处,就是父Java代码可以简单地通过沿管道发送"\\n"
来关闭子级。
import threading
import sys
# add everything before your while loop here
def parent_exit_detector(ser_to_close, pipe_to_wait):
"""Wait for any data or close on pipe and then close the
serial port"""
try:
pipe_to_wait.read(1)
finally:
ser.close()
_exit_detector_thread = threading.Thread(target=parent_exit_detector,
args=(ser, sys.stdin))
_exit_detector_thread.isDaemon = True
# add the while loop here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.