3

我想获取从预定事件调用的函数返回的值。下面是我想做的一个简单的例子。

import time
import sched

schedule = sched.scheduler(time.time, time.sleep)

def ret_this():
    return "This."

def schedthis():
    schedule.enter(2,1,ret_this, ())
    schedule.run()
    ## <- print returned value here

if __name__ == "__main__":
    schedthis()

我尝试了很多事情,例如:

     schedule.enter(2,1,print ret_this, ())

甚至:

    schedule.enter(2,1,ret = ret_this, ())
    schedule.run()
    print ret


也许需要一些背景知识。

我想创建一个服务器来监听传入的连接(这已经完成了。)。建立连接后,将产生一个新线程,并将套接字解析到该线程。在该线程上,将读取发送到服务器的值,并且服务器将判断客户端尝试调度的内容。一旦服务器知道客户端想要什么,它就会安排它。

如果用户想在计划的事件完成后查看信息(此答案的来源),那么它将等到事件结束并将返回的值发送给客户端。

如果没有,该活动将被安排,客户将收到“完成,告别”。并且连接将关闭。

我叫编程大神,请你帮帮我。

4

1 回答 1

2

问题其实很简单。你从ret_this函数中返回了一些东西,但你没有把它放在任何地方,也没有打印它!

编辑
请看这个

原来我之前发布的代码只执行该函数,而不是当它由调度程序运行时。由于scheduler.run只运行一个函数而不真正关心它返回的值,因此您必须将它存储在某个地方才能真正知道它何时被调用。

例如,在全局变量中:

def ret_this():
    global result
    result = "I'm called!"

或者只是从以下位置打印ret_this

def ret_this():
    print "This."

编辑 2
另一种存储方式是将其写入文件中。你可以稍后再读一遍:

def ret_this():
    with open('output.txt', 'w') as f:
        f.write('I am called!')

if __name__ = "__main__":
    schedthis()
    with open("output.txt", 'r') as f:
        print(f.read())

如果执行成功,您的文件将包含I am called!. 否则,它将是空的。

希望这可以帮助!

于 2013-10-30T10:40:31.737 回答