Open3

hipfile内のPDGタスクを回しつつ、タスク完了時のファイル出力を監視してUDPで他アプリケーションに通知するサンプル

yohawingyohawing

Houdiniのpython module hou でPDGのタスクを叩くスクリプト

import hou

def cookTopNet():
    hou.hipFile.load(graph_file)
    net = hou.node('/tasks/export_volume_texture')
    to_cook = net.displayNode()

    # 必ずネットワーク(TOPネットワークから作成されたPDGネットワーク)を初期化してください。
    ret = to_cook.executeGraph(block=True, tops_only=True)
    
    to_cook.executeGraph(block=True)
    
    to_cook.dirtyAllTasks(False)
yohawingyohawing

ファイル監視ツールのwatchdogでファイルの生成をFilesystem上で検知するスクリプト
houで実行したPDGタスクの進捗や完了を検知することができなかったため、ファイル監視という苦肉の策を用いて実装

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class WatchEventHandler(FileSystemEventHandler):
    def __init__(self):
        super(MyHandler, self).__init__()
        
    def _run_command(self):
        subprocess.call([self.command, ])
        return

    def on_any_event(self, event):
        return

    def on_moved(self, event):
        return

    def on_created(self, event):
        cookTopNet()

    def on_deleted(self, event):
        return

    def on_modified(self, event):
        #print(event)
        return


def watch(path, command="", extension="ply"):
    print('Watching for changes - Ctrl-C to exit...')

    event_handler = WatchEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()

    try:
        while True:
            time.sleep(0.1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()
yohawingyohawing

当時時間がなかったからやっつけ作業したけど、今思えばHoudini内のPythonから通知飛ばしたり、もっとDocument読み込んで他の手を探したりやりようがあったのでは?と思ってしまう。
PDGタスクの進捗管理方法でアイデアがあったら募集中