Celery任务子进程:找不到命令(127)

时间:2014-06-11 20:34:54

标签: python flask sqlalchemy rabbitmq celery

我有一个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_filesmake_snapshot只运行相同的命令争论,他们工作正常。此外,从解释器运行update_db命令也可以正常工作!如果我删除了课程SqlAlchemyTask和相应的任务update_db,则此tasks.py文件可以正常运行。

任何有关修复此问题的帮助都会很棒! 谢谢!

0 个答案:

没有答案