我有一个计划为cronjob的celery 任务,但如果失败,我将运行一个备份脚本,该脚本将命令选项中的任务作为子进程运行。
1) Activate python virtual environment in right directory
2) Use django manage.py to acess python shell
3) import and run the task
我创建了如下代码
process = subprocess.Popen(["source", "/application/bin/activate", "&&", "python3","/application/src/manage.py", "shell"],stdin=subprocess.PIPE,stdout=subprocess.PIPE)
output1, error1 = process.communicate(b"from app.tasks import prediction")
output2, error2 = process.communicate(b"prediction.run_task()")
这会导致django import not found错误,这是由于没有激活python venv而引起的
在终端中运行时,这些命令都能正常工作
有没有更好的方法来做到这一点,或者我如何解决这个问题?
1条答案
按热度按时间ru9i0ody1#
您可以使用
source
命令激活虚拟环境,然后使用python
命令激活以运行manage.py
脚本,并使用必要的参数访问Python shell和运行任务,而不是使用subprocess
激活虚拟环境和运行Celery任务。您可以使用subprocess
模块在备份脚本中运行此命令:这将激活虚拟环境并成功运行Celery任务