Как отправить команды из PHP-скрипта в Терминал с интерпретатором Python?

Я хочу получить доступ к терминалу из скрипта 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);

Затем я обнаружил, что могу открыть интерпретатор Maya Python в терминале, используя этот каталог: /Applications/Autodesk/maya2016/Maya.app/Contents/bin/mayapy

Когда этот каталог выполняется в Терминале, он запускает интерпретатор Maya Python. Когда интерпретатор работает, кажется, что я больше не могу отправлять команды (теперь это код Python) в терминал из моего PHP-скрипта.

Я иду по правильному пути, используя функцию exec() для выполнения того, что я хочу сделать? Или эта функция просто выполняет отдельные команды, а не несколько команд последовательно в одном терминале? Нужно ли использовать другую функцию, которая отправляет команды в конкретную оболочку, чтобы все команды выполнялись в одном терминале?

Вот код, который я пытался отправить в терминал, чтобы запустить интерпретатор Maya Python, а затем импортировать автономную библиотеку 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);

person skelto    schedule 23.06.2016    source источник
comment
используйте popen(), который позволяет вести двусторонний диалог с внешним процессом.   -  person Marc B    schedule 23.06.2016
comment
Похоже на проблему X-Y... вы уверены, что вам нужно вызывать python из php? По крайней мере, почему бы не написать скрипт Python для интерпретации, а не открывать Python и вводить его в интерактивном режиме?   -  person Chris Sprague    schedule 23.06.2016
comment
@ChrisSprague да, на самом деле это был бы идеальный метод. У меня уже написан скрипт Python, как мне интерпретировать этот скрипт в Maya? Команду необходимо вызывать из сценария PHP, поскольку она находится на сервере и выполняется запросом AJAX с моей веб-страницы.   -  person skelto    schedule 23.06.2016
comment
@skelto не могу сказать, что знаю Maya, но если бы мне пришлось взглянуть, это было бы запущено как что-то вроде mayapy /path/to/script.py. Убедитесь, что mayapy добавлено к вашему $PATH -- т.е. добавьте Maya /bin к вашему пути   -  person Chris Sprague    schedule 23.06.2016
comment
@ChrisSprague хорошо, я попробую, спасибо за помощь!   -  person skelto    schedule 23.06.2016
comment
@skelto да, надеюсь, это сработает. Я бы попробовал просто запустить mayapy из терминала, чтобы увидеть, подхватывается ли он на вашем пути; если нет, вот как добавить в PATH.   -  person Chris Sprague    schedule 23.06.2016
comment
@ChrisSprague просто для ясности: если это мой путь к интерпретатору Maya Python - /Applications/Autodesk/maya2016/Maya.app/Contents/bin/mayapy, а это путь к скрипту Python, который я хочу запустить в Maya - /Users/Gal/Desktop/Mark's Humane Files/Final Python Files/CreateSkinnedCharacter.py, то как будет выглядеть команда, отправленная в Терминал ?   -  person skelto    schedule 23.06.2016
comment
@skelto Я бы сказал /path/to/interp /path/to/script.py, но я не знаю, так ли работает интерпретатор Maya, просто обычное соглашение интерпретаторов (ruby, python, bash, php и т. д...)   -  person Chris Sprague    schedule 23.06.2016


Ответы (1)


Вам не нужно кодировать отдельно с 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);
person Achayan    schedule 23.06.2016