如何让Python等待输入?

我在Maya中使用python,一个3D动画包。 我喜欢运行一个定义(A),但是在这个定义中,我需要另一个定义(B),它需要有效的对象选择。 这个脚本会一直持续下去直到创建一个(在def B中),并且我想用def B的返回值继续我的脚本(def A)。我如何告诉def A等待直到返回有效的返回值def B?

这么简单的问题:我如何让python等待一个有效的返回值被接收?

我希望这是有道理的,并提前感谢您的时间。

C

例:

def commandA () :
   result = commandB()
   ### Wait for a value here ###
   if result == "OMG its a valid selection" :
      do_another_commandC()

def commandB () :
   # This command is kept running until a desired type of selection is made
   maya.mel.eval("scriptjob "making a valid selection" -type polygon")
   if selection == "polygon" :
      return "OMG its a valid selection"
   else :
      commandB()

我在###行中需要一些东西来等待,直到收到所需的回报,然后继续处理。 目前该功能只是运行一切而已。

谢谢


如果commandB()的范围限于commandA(),你可以考虑使用闭包(什么是闭包?)

或者只是嵌套的python函数(http://effbot.org/zone/closure.htm,http://www.devshed.com/c/a/Python/Nested-Functions-in-Python/)

在考虑“result = commandB()”语句的代码的任何部分,

解释器应该等待,直到从commandB()返回并分配给结果,然后继续执行下一行。


你可以使用一个while循环:

def commandA () :
    result = ""
    while (result != "OMG its a valid selection")
       # perhaps put a 0.1s sleep in here
       result = commandB()
    do_another_command()

我注意到了

你的代码中的selection实际上并没有被赋予一个值(至少在你给我们的代码中没有),它不应该是:

selection = maya.mel.eval("scriptjob "making a valid selection" -type polygon")


另外,你为什么递归地调用commandB有一个原因吗? 这可能最终会使用不必要的资源,特别是如果有人反复做出错误的选择。 这个怎么样?

def commandA () :
    result = ""
    while (result != "polygon")
       # perhaps put a 0.1s sleep in here (depending on the behavior of the maya command)
       result = commandB()
    do_another_command()

def commandB () :
   # This command retrieves the selection
   selection = maya.mel.eval("scriptjob "making a valid selection" -type polygon")
   return selection 
链接地址: http://www.djcxy.com/p/4887.html

上一篇: How to make Python Wait for input?

下一篇: Default values for arguments