Я хочу получить доступ к Терминалу из PHP-скрипта, чтобы открыть автономную версию Maya, а затем запустить скрипт Python в Maya из Терминала.
Я смог отправить команды в терминал из моего скрипта PHP, используя exec()
функция. Например, я смог открыть Maya с помощью файла .OBJ, используя следующий код.
//Open Maya with .OBJ
$cmd='open -a /Applications/Autodesk/maya2015/maya.app /Applications/AMPPS/www/webGL/upload/Character.obj';
exec($cmd);
Затем я обнаружил, что могу открыть интерпретатор Python Maya в Терминале, используя этот каталог:
/Applications/Autodesk/maya2016/Maya.app/Contents/bin/mayapy
Когда этот каталог выполняется в Терминале, он запускает интерпретатор Python Maya. Когда интерпретатор работает, кажется, что я больше не могу отправлять команды (теперь это код Python) в терминал из моего сценария PHP.
Я иду по правильному пути с использованием exec()
Функция выполнять то, что я хочу сделать? Или эта функция просто выполняет отдельные команды, а не несколько команд последовательно в одном терминале? Нужно ли использовать другую функцию, которая отправляет команды в определенную оболочку, чтобы все команды выполнялись в одном терминале?
Вот код, который я пытался отправить в Терминал для запуска интерпретатора Python Maya, а затем импортировать автономную библиотеку Maya и инициализировать ее.
//Open Maya interpreter
$cmd2="/Applications/Autodesk/maya2016/Maya.app/Contents/bin/mayapy";
//Import standalone and initialise
$cmd3="import maya.standalone; maya.standalone.initialize( name='python' )"
//Execute commands
shell_exec($cmd2);
shell_exec($cmd3);
Вам не нужно кодировать отдельно с помощью Mayapy, вы можете запустить скрипт напрямую с помощью Mayapy.
test.py
import os
import maya.standalone
maya.standalone.initialize()
import maya.cmds as cmds
print dir(cmds)
Вы можете просто назвать этот скрипт так
mayapy /your/path/test.py
В твоем случае
$cmd2="/Applications/Autodesk/maya2016/Maya.app/Contents/bin/mayapy /your/path/test.py";
shell_exec($cmd2);
Других решений пока нет …