我有一个tasks.py
文件试图将subprocess.check_output
命令的输出写入数据库(SQLAlchemy)。
我正在按照指向子类化实际任务的教程,以便关闭数据库连接会更可靠,但由于某种原因,现在该类中的subprocess.check_output
命令返回127代码。
这是tasks.py
import subprocess
import os
from celery import Celery
from flask import flash
from db import db_session
app = Celery('tasks', backend='amqp', broker='amqp://guest@localhost//')
class SqlAlchemyTask(app.Task):
abstract = True
def after_return(self, status, retval, task_id, args, kwargs, einfo):
db_session.remove()
@app.task(base=SqlAlchemyTask)
def update_db(var):
#### these do not work ####
repos = subprocess.check_output(['aplty', 'repo', 'list', '-raw'])
snaps = subprocess.check_output(['aptly', 'snapshot', 'list', '-raw'])
repos2 = repos.splitlines()
snaps2 = snaps.splitlines()
for x in repos2:
repo = Repos(x)
db.session.add(repo)
db.session.commit()
for y in snaps2:
snap = Snaps(y)
db.session.add(snap)
db.session.commit()
### UPLOAD TASKS
@app.task(track_started=True)
def move_files(upRepo, filedir):
if subprocess.check_call(['aptly', 'repo', 'add', upRepo, filedir]) == 0:
pass
else:
subprocess.check_call('false')
subprocess.check_call('false')
### SNAPSHOT TASKS
@app.task(track_started=True)
def make_snapshot(existRepoName, snapName):
if subprocess.check_call(['aptly', 'snapshot', 'create', snapName, 'from', 'repo', existRepoName]) == 0:
pass
else:
subprocess.check_call('false')
update_db
任务是subprocess.check_output
命令返回127的任务,这是奇怪的,因为move_files
和make_snapshot
只运行相同的命令争论,他们工作正常。此外,从解释器运行update_db
命令也可以正常工作!如果我删除了课程SqlAlchemyTask
和相应的任务update_db
,则此tasks.py
文件可以正常运行。
任何有关修复此问题的帮助都会很棒! 谢谢!