繁体   English   中英

如何让我的脚本在后台运行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM