Mat*_*ina 5 python bash subprocess scheduled-tasks
我有一个程序可以 24/7 全天候运行,从相机获取帧,通过本地网络处理和发送 .jpg 图像。通常,我不希望将任何视频保存到文件中,但是我可能希望在某些情况下安排 x 分钟的保存时间(未触发,已安排)。
我通过调用 VideoWriter 作为 VideoCamera 的线程来处理视频录制。我发现这对于使用正确的 fps 处理写作更准确。当我想从头开始录制以及只想流式传输时,此过程非常有效。我是这样启动相机的。
import ...
# from custom file import `VideoCamera` which has access to `VideoWriter`
from camera import VideoCamera
video_camera = VideoCamera(
flip = False,
usePiCamera = False,
resolution = (640, 480),
record = False,
record_duration = None,
record_timestamp = True
)
Run Code Online (Sandbox Code Playgroud)
相机不能被初始化两次(不能访问同一个相机两次)。因此,我正在考虑使用新参数(例如record = True, record_duration = "00:10:00")安排停止和重新启动。
我从控制台 ( python main.py)调用脚本,它具有:
if __name__ == '__main__':
t = threading.Thread(target=processing_fun, args=())
t.daemon = True
t.start()
print("To see feed connect to " + get_ip_address() + ":5000")
# to do, read ifconfig and assign IP using raspberry's IP
app.run(host='0.0.0.0', port = 5000, debug=False)
Run Code Online (Sandbox Code Playgroud)
processing_fun如果我这样做会死,del(video_camera)因为它需要来自相机的帧。流也一样。我不确定有没有办法在不破坏线程的情况下删除相机。
我在想一种方法
video_camera没有记录的情况下进行初始化您可以使用crontab来安排脚本,并且您提到您也可以使用 来终止脚本crontab。您可以创建一个startup.sh脚本和某种脚本shutdown.sh来管理您的日程安排。
下面是一个例子:
你的Python脚本说your_script.py:
import ...
# from custom file import `VideoCamera` which has access to `VideoWriter`
from camera import VideoCamera
video_camera = VideoCamera(
flip = False,
usePiCamera = False,
resolution = (640, 480),
record = False,
record_duration = None,
record_timestamp = True
)
first_arg = sys.argv[1]
second_arg = sys.argv[2]
third_arg = sys.argv[3]
# pass the above arguments here in the function
if __name__ == '__main__':
t = threading.Thread(target=processing_fun, args=())
t.daemon = True
t.start()
print("To see feed connect to " + get_ip_address() + ":5000")
# to do, read ifconfig and assign IP using raspberry's IP
app.run(host='0.0.0.0', port = 5000, debug=False)
Run Code Online (Sandbox Code Playgroud)
cron-python 脚本来安排你的 python 脚本:
将此脚本命名为schedule_cron_python.py 并调用它来管理您的日程安排。在这里,您可以将整个代码保留在一个函数中,并将参数传递给此 cron 脚本,例如您想要安排的时间日期,然后使用另一个 cron 脚本对其进行管理。(第一个选项)
from crontab import CronTab
import os
import sys
cron = CronTab(user='sshuser')
job1 = cron.new(command="python3 your_script.py 'arg1' 'arg2' 'arg3'")
job1.hour.on(5) # Mention your own time here
job1.minute.on(30)
for item in cron:
print(item)
print(job1.enable())
cron.write()
#print(os.getcwd())
Run Code Online (Sandbox Code Playgroud)
第二个选项:
创建单独的startup.sh和shutdown.sh
这些文件将只包含命令,就像nohup它只会调用您的脚本一样:
nohup python3 your_script.py
Run Code Online (Sandbox Code Playgroud)
.sh现在您可以在 cron 脚本中调用这些文件来管理您的日程安排。
from crontab import CronTab
import os
import sys
cron = CronTab(user='sshuser')
job1 = cron.new(command="sh startup.sh")
job1.hour.on(5) # Mention your own time here
job1.minute.on(30)
job2 = cron.new(command="sh shutdown.sh")
job1.hour.on(6) # Mention your own time here
job1.minute.on(30)
for item in cron:
print(item)
print(job1.enable())
cron.write()
Run Code Online (Sandbox Code Playgroud)
请参阅此内容以获取有关 cron 的更多背景信息和一些更有用的功能。 https://pypi.org/project/python-crontab/
| 归档时间: |
|
| 查看次数: |
869 次 |
| 最近记录: |