【问题标题】:How to pause or stop python program between certain hours (not based on elapsed time!)如何在特定时间之间暂停或停止 python 程序(不基于经过的时间!)
【发布时间】:2020-12-10 06:17:24
【问题描述】:

我正在尝试找到一种方法让我的 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()

有没有办法在并行线程中定期检查时间,并在特定小时之间暂停程序?

如果我在 try 语句之前添加线程语句,下面发布的解决方案是否适用于我的程序?...

How to schedule python script to exit at given time

【问题讨论】:

  • 通常应该在操作系统级别处理。
  • 带有 time.sleep() 的时间模块是你需要的工具,这里有一个完整的教程journaldev.com/15797/python-time-sleep
  • @Cyber​​-Tech 无法工作,因为主线程暂停并等待事件。它不能同时检查等待输入时已经过去了多少时间。

标签: python python-3.x python-multithreading scheduling exit


【解决方案1】:

首先,创建一个 cron 作业(由于 GPIO 调用,我相信您在 Linux 上),在每晚 21:30 启动脚本。

30 21 * * * python /path/to/python/script

然后,在 4:30 创建第二个 cron 作业,以终止所有正在运行您的程序的现有进程。

30 4 * * * pkill -f /path/to/python/script # Will need to be edited to the actual process name that runs.

Killing a process by matching name

【讨论】:

  • 谢谢@jarcobi889。是的 Linux 操作系统。我将进一步探索 cron 方法,但是这里的问题/挑战是让程序使用 kill 命令优雅地退出。 (即关闭泛光灯,如果已经在录制视频,则完成录制,并在退出前清理 GPIO 状态)对这种方法有什么想法吗?
  • 您将使用signal 模块来检测终止中断并使用它来设置您的最终状态,例如完成录制视频并在退出前关闭泛光灯。
  • 谢谢 - 如果/成功时将进一步探索该模块并在此处发布最终代码:-)
【解决方案2】:

Python Pause https://github.com/jgillick/python-pause/ 支持暂停到某个日期时间。

Java Threads 2n​​d edition 也有一个作业调度器的示例代码;也许您可以将其用作蓝图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-09
    • 2010-12-05
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    相关资源
    最近更新 更多