コマンドラインから Maya のスクリプトを走らせる
import os
import subprocess
TARGET_DIRECTORY = r'D:\test'
JSON_PATH = r'D:\test\json\result.json'
MAYA_PATH = r'C:\Program Files\Autodesk\Maya2022'
MAYA_PYTHON_PATH = os.path.join(MAYA_PATH, r"bin\mayapy.exe")
PACKAGES_PATH = os.path.join(MAYA_PATH, r"Python\Lib\site-packages")
def run_maya_script(file_path):
"""
Args:
file_path (str): ファイルパス
"""
print('\n\n------------------------------------------------------------------\n\n')
print('ファイル名 :', file_path)
script = r"""
import os
import json
import maya.cmds as cmds
import maya.standalone
maya.standalone.initialize(name='python')
FILE_PATH = r'{}'
JSON_PATH = r'{}'
# fbx ファイルを開く場合はプラグインのロードが必要
if not cmds.pluginInfo(r"fbxmaya", query=True, loaded=True):
cmds.loadPlugin(r"fbxmaya")
# エラーで止まるので小まめに try 文を使用する
try:
# ファイルを開く
cmds.file(FILE_PATH, open=True, force=True)
except:
pass
# シーン内の全てのメッシュノードをリストアップ
mesh_list = cmds.ls(type='mesh')
print(mesh_list)
# json ファイルへ記載
file_name = os.path.splitext(os.path.basename(FILE_PATH))[0]
if os.path.isfile(JSON_PATH):
with open(JSON_PATH, 'r', encoding='utf-8') as f:
content = json.load(f)
else:
content = {{}}
content[file_name]= mesh_list
with open(JSON_PATH, 'w') as f:
json.dump(content, f, indent=4, ensure_ascii=False)
""".format(file_path, JSON_PATH)
# print(process_script)
# MayaのPythonコマンドラインツールを使用してスクリプトを実行
# result = subprocess.check_output([MAYA_PYTHON_PATH, "-c", script])
result = subprocess.run(
[MAYA_PYTHON_PATH, "-c",
script],
capture_output=True,
text=True,
)
print('stdout :', result.stdout)
print('\nstderr :')
print(result.stderr)
# 結果を表示
print('\n\n結果 :')
print(result)
def main():
# PYTHONPATH にパッケージフォルダを追加
# これ追加しないとエラーになるので注意
# No module named 'maya.standalone' のエラーがでたらこれが原因
os.environ["PYTHONPATH"] = PACKAGES_PATH
item_list = os.listdir(TARGET_DIRECTORY)
for item in item_list:
file_path = os.path.join(TARGET_DIRECTORY, item)
run_maya_script(file_path)
if __name__ == '__main__':
main()