Houdini 19.0 Pythonスクリプト

コマンドラインスクリプト

On this page

標準のPythonシェルからhouにアクセスする

You can integrate Houdini into your Python scripts by importing the hou module in a regular Python shell. The first time you import hou, Python will load all of Houdini’s libraries and initialize an empty Houdini session. The hou module effectively stores a Houdini session, and you can load into that session from a hip file, inspect that file from your script, and input and output information to and from nodes in that session.

To import the hou module, you first need to instruct Python to search $HFS/houdini/pythonX.Ylibs for Python modules. This can be accomplished either by appending the path to the PYTHONPATH environment variable before starting Python, or by appending the path to sys.path in Python.

Tip

The $HHP environment variable is a convenience variable that point to $HFS/houdini/pythonX.Ylibs. It is set when sourcing the houdini_setup script.

The following Python snippet imports the hou module into a standard Python shell. The snippet assumes that the houdini_setup script was sourced beforehand.

def enableHouModule():
    '''"import hou"が動作するように、環境をセットアップします。'''
    import sys, os

    # houをインポートすることで、Houdiniのライブラリが読み込まれ、Houdiniが初期化されます。
    # これによって、HoudiniはC++で記述されたHDK拡張を読み込みます。
    # それらの拡張は、Houdiniのライブラリに対してリンクさせる必要があるので、Houdiniのライブラリのシンボルが、
    # Houdiniが読み込む他のライブラリから見えている必要があります。
    # シンボルが見える状態にするために、RTLD_GLOBAL dlopenフラグを追加します。
    if hasattr(sys, "setdlopenflags"):
        old_dlopen_flags = sys.getdlopenflags()
        sys.setdlopenflags(old_dlopen_flags | os.RTLD_GLOBAL)

    try:
        import hou
    except ImportError:
        # houモジュールをインポートできなかった場合に
        # Pythonがhouモジュールを検索できるようにするために
        # sys.pathに`$HFS/houdini/pythonX.Ylibs`を追加します。
        sys.path.append(os.environ['HHP'])
        import hou
    finally:
        # dlopenフラグを元の値に戻ります。
        if hasattr(sys, "setdlopenflags"):
            sys.setdlopenflags(old_dlopen_flags)

enableHouModule()
import hou

Note

If you do not run source houdini_setup, you must set the HFS and/or HHP environment variables manually. On Windows, you must also append the value of $HFS/bin to the PATH environment variable.

Note

When you import the hou module, the Houdini initialization scripts 123.cmd/123.py and 456.cmd/456.py will run.

Note

On Linux, you may encounter a warning about JE Malloc not being configured. JE Malloc helps improve memory performance in Houdini’s operations.

To configure JE Malloc, preload the jemalloc library when starting Python. For example:

LD_PRELOAD="$HFS/dsolib/libjemalloc.so" python

You can alternatively disable the JE Malloc warning by setting HOUDINI_DISABLE_JEMALLOCTEST=1 in the environment before importing the hou module.

ライセンス付与

houモジュールをインポートする時は、Pythonはライセンスをチェックします。 デフォルトでは、PythonはHoudini Batchライセンスを使用し、BatchライセンスがなければHoudini FXライセンスを使用します。Pythonが使用するHoudiniライセンスを指定したい場合は、houモジュールをインポートする前にHOUDINI_SCRIPT_LICENSE変数をhescapeに設定します。Pythonスクリプトから、この変数を設定するには、os.environ['HOUDINI_SCRIPT_LICENSE'] = 'hescape'を記述します。

デフォルトでは、houモジュールはPythonインタプリタが終了するまでHoudiniのライセンスを返しません。しかし、Pythonスクリプトを長時間実行して、すぐにライセンスを取得して解放したい場合は、houモジュールを使い終わった時にhou.releaseLicense()をコールすることができます。houモジュールはコールされた時点でライセンスを取得します。HoudiniのセッションデータとライブラリはPythonが終了するまでメモリからアンロードされないことに注意してください。

houモジュールは、PythonやHoudiniでインポートされると、$HOUDINI_PATH内のディレクトリをループします。そして、見つかったディレクトリ名に“/python2.7libs”を足してsys.pathに追加します。さらに上位互換用に$HOUDINI_PATHはディレクトリ名に“/scripts/python”を足して検索されます。例えば、$HOME/houdiniX.Y/python2.7libsにPythonモジュールを配置すれば、houをインポートした後にPython検索パスにそのパスが追加されます。

hython

HythonはHoudiniと一緒に入っているPythonシェルで、標準のPythonシェルと以下の点で少し異なります:

  • Hythonは自動的に$HFS/houdini/python2.7libsをsys.pathに追加し、Hythonを起動するとhouモジュールをインポートします。

  • コマンドライン上で.hipファイルを渡して、それを読み込むことができます。

  • Tab補完をサポートしています。2回Tabを押すと補完リストが表示されます(LinuxとMac)。

  • インタラクティブシェルでHScriptコマンド名の前に%を付けることでHScriptコマンドを実行することができます。

  • -bオプションでHythonを起動して、コンソール入力を待ちながら、openportコマンドを受け取って、それを操作することができます。

デフォルトでは、Hythonはバックグラウンドではopenportソケットをリッスンせず、送られたコマンドを実行しません。しかし、-bオプションを使えば、可能になります。openportイベントのリッスン時、Hythonは、標準のPythonとは違う仕組みでコマンドライン入力を読み込みます。この別の仕組みは、Hythonがバックグラウンドにフォークしたり途中で終了したりした場合、コンソールを悪い状態のままにし、回りこまれた行を編集すると奇妙な動作が起きる可能性があることに注意してください。

Pythonスクリプト

はじめよう

次のステップ

リファレンス

  • hou

    Houdiniにアクセスできるサブモジュール、クラス、ファンクションを含んだモジュール。

導師レベル

Python Viewerステート

Pythonビューアハンドル

プラグインタイプ