0

3D アニメーション パッケージである Maya で Python を使用しています。定義 (A) を実行したいのですが、その定義内で、有効なオブジェクト選択を必要とする別の定義 (B) が必要です。スクリプトは (定義 B で) 作成されるまで続行され、定義 B からの戻り値を使用してスクリプト (定義 A) を続行したい. 有効な戻り値が取得されるまで待機するように定義 A に指示するにはどうすればよいですか?デフB?

簡単な質問: 有効な戻り値が受信されるまで Python を待機させるにはどうすればよいですか?

お時間をいただきありがとうございます。

例:

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()

関数が目的のリターンを受け取るまで待機し、残りを続行するには、 ### 行に何かが必要です。現時点では、関数は関係なくすべてを実行します。

ありがとうございました

4

2 に答える 2

0

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 
于 2012-06-22T06:24:49.237 に答える
0

commandB() のスコープが commandA() に限定されている場合は、クロージャーの使用を検討できます (クロージャーとは何ですか? )

または単純にネストされた python 関数 (http://effbot.org/zone/closure.htm 、http://www.devshed.com/c/a/Python/Nested-Functions-in-Python/ )

「result = commandB()」ステートメントを考慮したコードの任意の部分で、

インタープリターは、commandB() から何かが返され、result に割り当てられるまで待機してから、実行する次の行に進む必要があります。

于 2012-06-22T06:42:17.873 に答える