如何在特定时间段内暂停或停止Python程序(不基于经过的时间)?

3

我希望找到一种让我的Python程序持续运行,但确保主脚本仅在夜间活动(例如在21:30和04:30之间)的方法。

背景:我的程序记录动态激活的视频并启动洪水灯。

以下是主要程序片段:

目前我每天晚上都在运行它,然后在早上用Ctrl-C终止!

try:

signal.signal(signal.SIGHUP,SigHandler) # proper exit for SIGHUP (terminal hangups)

while GPIO.input(PIR_PIN)==1: # Loop until PIR output is stabilised at 0
    pass

GPIO.add_event_detect(PIR_PIN, GPIO.RISING, callback=MotionDetected)

signal.pause() #pauses main program forever & waits for PIR Rising Edge unless interrupted

except KeyboardInterrupt:
    print("")

finally:
    GPIO.output(16, GPIO.LOW) #floodlight off
    GPIO.cleanup()

有没有一种方式可以在并行线程中定期检查时间,并在特定时间段之间暂停程序呢?

如果我在尝试语句之前添加线程语句,下面发布的解决方案也许适用于我的程序吗?...

如何安排 Python 脚本在给定时间退出


1
通常情况下,这应该在操作系统层面上处理。 - Olvin Roght
time模块和time.sleep()是您需要的工具,这里有一个完整的教程 https://www.journaldev.com/15797/python-time-sleep - user13824946
1
@Cyber-Tech,那样做行不通,因为主线程会暂停并等待事件。它无法同时检查等待输入时经过了多长时间。 - jarcobi889
2个回答

2
首先,创建一个cron作业(我相信你正在使用Linux因为GPIO调用),在每晚21:30启动脚本。 30 21 * * * python /path/to/python/script 然后,在4:30创建第二个cron作业,以终止运行程序的任何现有进程。 30 4 * * * pkill -f /path/to/python/script #将需要编辑为实际运行的进程名称。 杀死匹配名称的进程。 Killing a process by matching name

感谢@jarcobi889。是的,Linux操作系统。我将进一步探索cron方法,但是这里的问题/挑战是使用kill命令使程序优雅地退出。(即关闭聚光灯,在录制视频完成之前完成录制,并在退出之前清理GPIO状态)对于这种方法有什么想法吗? - CodeFlan
1
你可以使用 signal 模块来检测 kill 中断信号,并在退出之前使用它来设置最终状态,如完成录制视频和关闭洪灯。 - jarcobi889
谢谢 - 如果成功的话,我会进一步探索那个模块并在这里发布最终代码 :-) - CodeFlan

1

Python Pause https://github.com/jgillick/python-pause/ 支持暂停执行直到特定日期时间。

另外,《Java Threads》第二版有一个作业调度器的示例代码;也许您可以将其用作蓝图。


谢谢你的建议。我已经暂停了这个项目很多个月,但希望将来能够回到它,并尝试一下这个方法。 - CodeFlan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接