将参数传递给python decorator

时间:2012-09-12 21:49:43

标签: python decorator uwsgi

我正在使用uwsgi装饰器(特别是cron装饰器)在特定时间执行操作。我有以下代码:

import cherrypy
import uwsgidecorators

class TestObject(object):
    @cherrypy.expose
    def index(self):
        launchapp = self.launchapp(-1,-1,-1,-1,-1,"foobar")
        return "This is a test"

    @uwsgidecorators.cron(minute,hour,day,month,dayweek)
    def launchapp(self,target):
        print "the target is %s" %target
        return

然而我收到错误:

    @uwsgidecorators.cron(minute,hour,day,month,dayweek)
NameError: name 'minute' is not defined

我基本上试图在索引函数中指定cron修饰符的时序参数。谁知道我做错了什么?

1 个答案:

答案 0 :(得分:2)

为什么你的代码失败

错误与您传递参数的事实无关,只是minute变量未定义。

你会得到完全相同的错误:

>>> a = 'a'
>>> print b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined
>>> 

您可能想要做的是:

@uwsgidecorators.cron(minute = 5,hour = 2, # and so on.

请查看uwsgi documentation以获取更全面的示例。


- 下面的编辑。

你如何解决它

在索引被点击后,您似乎正在尝试向crontab添加任务。

这不是装饰器的用例,装饰器只是说一个函数应该在函数定义的cron 上运行。 基本上,当执行装饰器时(和定义,而不是称为),它会被添加到crontab中。

在您的情况下,您想要向crontab添加一个函数;所以你应该使用uwsgi.add_cron之类的东西。您可以查看decorator code以了解如何使用它。

但是你不应该使用方法而是使用函数。