Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行Python脚本达k秒_Python_Python 3.x - Fatal编程技术网

运行Python脚本达k秒

运行Python脚本达k秒,python,python-3.x,Python,Python 3.x,我编写了一个Python脚本,读取串行监视器,以便从Arduino获取传感器读数。我一直在尝试解决以下问题:我希望我的脚本能精确运行一分钟,以便获取数据并脱机处理。例如,如果我执行以下脚本,它应该运行一分钟,然后停止。我尝试过使用时间模块或睡眠功能,但我的脚本一直在获取数据,并且没有停止。我不知道如何打破while循环。到目前为止,我一直通过按CTRL+C来停止执行,但脚本必须自行停止。这是我的代码(我还发布了get_reads函数): 蟒蛇 # -*- coding: utf-8 -*- im

我编写了一个Python脚本,读取串行监视器,以便从Arduino获取传感器读数。我一直在尝试解决以下问题:我希望我的脚本能精确运行一分钟,以便获取数据并脱机处理。例如,如果我执行以下脚本,它应该运行一分钟,然后停止。我尝试过使用时间模块或睡眠功能,但我的脚本一直在获取数据,并且没有停止。我不知道如何打破while循环。到目前为止,我一直通过按CTRL+C来停止执行,但脚本必须自行停止。这是我的代码(我还发布了get_reads函数):

蟒蛇

# -*- coding: utf-8 -*-
import chair_functions as cf
import os

if __name__ == '__main__':
    file_extension = '.txt'
    rec_file = 'chair_'+cf.get_date()+file_extension    
    raw_data = cf.create_directories()
    rec_file = os.path.join(raw_data,rec_file)
    cf.get_readings(rec_file)


# -*- coding: utf-8 -*-
from serial import Serial
import pandas as pd
import collections
import logging
import serial
import time
import sys
import csv 
import os 

def get_readings(output_file):
    """Read the data stream coming from the serial monitor 
       in order to get the sensor readings
    
    Parameters
    ----------
    output_file : str
        The file name, where the data stream will be stored
    """
    serial_port = "/dev/ttyACM0"
    baud_rate = 9600
    ser = serial.Serial(serial_port,baud_rate)
    logging.basicConfig(filename=output_file,level=logging.DEBUG,format="%(asctime)s    %(message)s")
    flag = False
    while True:
        try:
            serial_data = str(ser.readline().decode().strip('\r\n')) 
            time.sleep(0.2)
            tmp = serial_data.split('  ')[0] #Getting Sensor Id
            if(tmp == 'A0'):
                flag = True
            if (flag and tmp != 'A4'):
                #print(serial_data) 
                logging.info(serial_data)
            if(flag and tmp == 'A4'):
                flag = False
                #print(serial_data)         
                logging.info(serial_data)   
        except (UnicodeDecodeError, KeyboardInterrupt) as err:
            print(err)
            print(err.args)
            sys.exit(0)

时间模块本身不起作用。因此,不要对while条件使用
True
,而是设置
start=timer.time()
,然后设置
while-time.time()-start<60
:如下所示:

start = time.time()
while time.time() - start < 60:
    ...
start=time.time()
当time.time()-开始<60:
...

时间模块本身不工作。因此,不要对while条件使用
True
,而是设置
start=timer.time()
,然后设置
while-time.time()-start<60
:如下所示:

start = time.time()
while time.time() - start < 60:
    ...
start=time.time()
当time.time()-开始<60:
...

在开始时启动计时器,并定期检查其值。超过60秒时停止。我也试过了。不幸的是,它不能正常工作。如果我移除while循环,它将成功执行,而不是
True
,则设置
start=timer.time()
,然后
while-time.time()-s<60:
。不,正如我所说的,时间模块不执行work@am.rez老兄,你刚刚在我的论文里救了我一命!这是:设置start=timer.time(),而不是True,那么time.time()-s<60是一个很好的主意,它成功了!非常感谢!在开始时启动计时器,并定期检查其值。超过60秒时停止。我也试过了。不幸的是,它不能正常工作。如果我移除while循环,它将成功执行,而不是
True
,则设置
start=timer.time()
,然后
while-time.time()-s<60:
。不,正如我所说的,时间模块不执行work@am.rez老兄,你刚刚在我的论文里救了我一命!这是:设置start=timer.time(),而不是True,那么time.time()-s<60是一个很好的主意,它成功了!非常感谢!