Python 程序在一段时间后停止,Beaglebone black Debian
Python program stops after sometime, Beaglebone black Debian
使用命令提示符 (PuTTY) 的 beaglebone black (rev.C) debian 程序 运行s 似乎最多工作 1-2 小时然后停止(=无数据日志)
经过几分钟的测试,它工作正常,但我不知道为什么它会在一段时间后停止,即使 BBB 仍然 运行ning(在稳定的电源下)
顺便说一句,欢迎任何评论。任何改进建议都有很大帮助。这显然是我有史以来的第一个程序
更新 01:
完整程序代码
最新行为示例:运行 1 小时记录,9 次。它在 2 小时后(几乎准确的 2 小时)停止记录,并且该文件在 "last edited" 2 小时后生成(例如,在 3.00 停止记录,最后编辑在 5.00)
import Adafruit_BBIO.ADC as ADC
import Adafruit_BBIO.GPIO as GPIO
import time
import sys
sensor_00 = 'P9_33'
sensor_mk = 'P9_35'
pinLED = 'P9_41'
ADC.setup()
GPIO.setup(pinLED, GPIO.OUT)
print('Sensor reading test..........')+ "\n"
test_rw00 = ADC.read_raw(sensor_00)
test_rwmk = ADC.read_raw(sensor_mk)
print('Sensor 00: %s' %test_rw00) + "\n"
print('Sensor mk: %s'%test_rwmk )+ "\n"
LogTime = int(input("Data file logging interval (seconds):"))
delay = int(raw_input("Reading delay: "))
TestLocation = raw_input("Test location:")
TestSpecs = raw_input("Test scpecs/ purposes: ")
n = int(raw_input("Estimated amount of Data file:"))
def indicatingLED():
GPIO.output(pinLED, GPIO.HIGH)
time.sleep(3)
GPIO.output(pinLED, GPIO.LOW)
time.sleep(1)
def TestSpecs_txtWrite():
datafile.write("Date and time of measurement:%s" % log_date_str+ "\n")
datafile.write("Data file logging interval (seconds): %s" %LogTime + "\n")
datafile.write("Test Location: %s" %TestLocation + "\n")
datafile.write("Test specs/ purposes: %s" %TestSpecs + "\n")
datafile.write("Test readings, sensors in position, elevator doesn't run: Sensor00: " + str(test_rw00) + ", ")
datafile.write("Sensor mk: " + str(test_rwmk) + "\n")
datafile.write("-------------------------------------------------------"+"\n")
print('Sensor reading started...')+ "\n"
for i in xrange(1,n):
t_end = time.time() + LogTime
log_date_str = time.strftime("%Y%m%d_%H%M")
datafile = open("%s.txt" %log_date_str,"w+")
TestSpecs_txtWrite()
while time.time() < t_end:
indicatingLED()
val_rw_00 = ADC.read_raw(sensor_00)
val_rw_mk = ADC.read_raw(sensor_mk)
datafile.write("Vol_Sensor00:" + str(val_rw_00) +", ")
datafile.write("Vol_Sensormk:" + str(val_rw_mk)+"\n")
time.sleep(delay)
log_date_str = time.strftime("%Y%m%d_%H%M")
datafile.write("Log ended at: %s" %log_date_str + "\n")
print('Measurement ended !-----------------------------------------------')
正如您所说,您正在与董事会断开联系。这将在连接超时后导致连接被重置并且 程序失去其控制 TTY。这将最终终止程序,这是预期的行为。
您应该探索以下内容:
- 追加
&
使进程与 TTY 分离
- 调查
nohup
- 运行 它在终端多路复用器中,如
screen
或 tmux
- 通过与控制终端分离,让程序本身进入 'background'。
还有其他类似 rc.local 或 systemd 服务文件。不过,以上内容应该足以作为一个简单解决方案的起点。一本关于基本 Linux 或嵌入式 Linux 系统的好书也会有所帮助。
使用命令提示符 (PuTTY) 的 beaglebone black (rev.C) debian 程序 运行s 似乎最多工作 1-2 小时然后停止(=无数据日志) 经过几分钟的测试,它工作正常,但我不知道为什么它会在一段时间后停止,即使 BBB 仍然 运行ning(在稳定的电源下)
顺便说一句,欢迎任何评论。任何改进建议都有很大帮助。这显然是我有史以来的第一个程序
更新 01: 完整程序代码 最新行为示例:运行 1 小时记录,9 次。它在 2 小时后(几乎准确的 2 小时)停止记录,并且该文件在 "last edited" 2 小时后生成(例如,在 3.00 停止记录,最后编辑在 5.00)
import Adafruit_BBIO.ADC as ADC
import Adafruit_BBIO.GPIO as GPIO
import time
import sys
sensor_00 = 'P9_33'
sensor_mk = 'P9_35'
pinLED = 'P9_41'
ADC.setup()
GPIO.setup(pinLED, GPIO.OUT)
print('Sensor reading test..........')+ "\n"
test_rw00 = ADC.read_raw(sensor_00)
test_rwmk = ADC.read_raw(sensor_mk)
print('Sensor 00: %s' %test_rw00) + "\n"
print('Sensor mk: %s'%test_rwmk )+ "\n"
LogTime = int(input("Data file logging interval (seconds):"))
delay = int(raw_input("Reading delay: "))
TestLocation = raw_input("Test location:")
TestSpecs = raw_input("Test scpecs/ purposes: ")
n = int(raw_input("Estimated amount of Data file:"))
def indicatingLED():
GPIO.output(pinLED, GPIO.HIGH)
time.sleep(3)
GPIO.output(pinLED, GPIO.LOW)
time.sleep(1)
def TestSpecs_txtWrite():
datafile.write("Date and time of measurement:%s" % log_date_str+ "\n")
datafile.write("Data file logging interval (seconds): %s" %LogTime + "\n")
datafile.write("Test Location: %s" %TestLocation + "\n")
datafile.write("Test specs/ purposes: %s" %TestSpecs + "\n")
datafile.write("Test readings, sensors in position, elevator doesn't run: Sensor00: " + str(test_rw00) + ", ")
datafile.write("Sensor mk: " + str(test_rwmk) + "\n")
datafile.write("-------------------------------------------------------"+"\n")
print('Sensor reading started...')+ "\n"
for i in xrange(1,n):
t_end = time.time() + LogTime
log_date_str = time.strftime("%Y%m%d_%H%M")
datafile = open("%s.txt" %log_date_str,"w+")
TestSpecs_txtWrite()
while time.time() < t_end:
indicatingLED()
val_rw_00 = ADC.read_raw(sensor_00)
val_rw_mk = ADC.read_raw(sensor_mk)
datafile.write("Vol_Sensor00:" + str(val_rw_00) +", ")
datafile.write("Vol_Sensormk:" + str(val_rw_mk)+"\n")
time.sleep(delay)
log_date_str = time.strftime("%Y%m%d_%H%M")
datafile.write("Log ended at: %s" %log_date_str + "\n")
print('Measurement ended !-----------------------------------------------')
正如您所说,您正在与董事会断开联系。这将在连接超时后导致连接被重置并且 程序失去其控制 TTY。这将最终终止程序,这是预期的行为。
您应该探索以下内容:
- 追加
&
使进程与 TTY 分离 - 调查
nohup
- 运行 它在终端多路复用器中,如
screen
或tmux
- 通过与控制终端分离,让程序本身进入 'background'。
还有其他类似 rc.local 或 systemd 服务文件。不过,以上内容应该足以作为一个简单解决方案的起点。一本关于基本 Linux 或嵌入式 Linux 系统的好书也会有所帮助。