文章定时自动采集(用Python编写数据采集脚本()上采集数据 )

优采云 发布时间: 2021-12-31 11:30

  文章定时自动采集(用Python编写数据采集脚本()上采集数据

)

  概述:

  在树莓派(xxxxx,以下简称工控机)采集数据上,传输到本地sqlserver数据库,用Python编写数据采集脚本。

  这涉及到几个问题:当出现网络中断、断电、工控机重启等异常情况时,为了保证这些异常情况的发生,数据仍然可以自动采集,需要以下两种解决方案实施的。

  开机自动启动;当脚本没有运行时,它会自动运行。

  首选第二种方案,因为python程序崩溃或者网络异常导致程序中断,需要一种机制让它自动运行。

  参考网址:

  常用命令:

  自动运行脚本:vim /etc/crontab

  查看进程:ps -ef|grep tcpclient.py

  自动运行脚本

  启动TCP服务器监控功能:

  

  输入vim /etc/crontab,最后输入* * * * * root python3 /home/pi/tcpclient.py

  

  tcpclient.py 代码:

  import socket

import time

import random

def main():

# 1 创建tcp套接字

while 1:

tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2 创建连接

tcp_socket.connect(('192.168.1.35', 6666))

# 3 发送数据

tcp_input = str(random.randint(2,15))

tcp_socket.send(tcp_input.encode('gbk')) # utf-8 中文会乱码

time.sleep(5)

# 4.关闭套接字

tcp_socket.close()

if __name__ == '__main__':

main()

  输入ps -ef|grep tcpclient.py,可以看到进程多了(带问号的),tcpclient.py有while循环,不会自动退出,所以tcpclient.py每分钟自动运行一次。

  

  优化

  当然无线增加程序进程是不可能的,所以有两种选择:

  每次执行tcpclient.py,都会自动关闭并终止程序,没有while循环。另外写一个test1.py程序,脚本会每分钟运行一次test1.py程序,test1.py判断tcpclient.py进程是否存在,如果存在不存在,它会运行;如果存在,它将不会运行。

  这次采用了第二个选项,以避免每次tcp断开和重新连接(除非你像本例那样在while循环中关闭了socket)。

  测试1.py 代码:

  import time

import os

import re

# execute command, and return the infomation. 执行命令并返回命令输出信息

def execCmd(cmd):

r = os.popen(cmd)

text = r.read()

r.close()

return text

def doSomething():

os.system('python3 /home/pi/tcpclient.py')

time.sleep(10)

if __name__ == '__main__':

#ps -ef是linux查看进程信息指令,|是管道符号导向到grep去查找特定的进程,最后一个|是导向grep过滤掉grep进程:因为grep查看程序名也是进程,会混到查询信息里

programIsRunningCmd="ps -ef|grep tcpclient.py"

programIsRunningCmdAns = execCmd(programIsRunningCmd) #调用函数执行指令,并返回指令查询出的信息

print(programIsRunningCmdAns)

ansLine = programIsRunningCmdAns.split('\n') #将查出的信息用换行符‘\b’分开

print(len(ansLine))

#判断如果返回行数>3则说明python脚本程序已经在运行,打印提示信息结束程序,否则运行脚本代码doSomething()

if len(ansLine) > 3:

print("programName have been Running")

else:

doSomething()

  结果

  可以看出,test1.py和tcpclient.py进程在任何时候都是一样的,不会无限增加。工控机重启后,过程还是一样,说明已经达到了预期的效果。

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线