ฉันจะส่งคำสั่งจากสคริปต์ PHP ไปยัง Terminal ที่ใช้ล่าม Python ได้อย่างไร

ฉันต้องการเข้าถึง Terminal จากสคริปต์ PHP เพื่อเปิด Maya เวอร์ชันสแตนด์อโลน จากนั้นเรียกใช้สคริปต์ Python ใน Maya จาก Terminal

ฉันสามารถส่งคำสั่งไปยัง Terminal จากสคริปต์ 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 ใน Terminal ได้โดยใช้ไดเรกทอรีนี้: /Applications/Autodesk/maya2016/Maya.app/Contents/bin/mayapy

เมื่อไดเร็กทอรีนี้ถูกเรียกใช้งานใน Terminal ไดเร็กทอรีจะรันล่าม Maya Python เมื่อล่ามทำงาน ดูเหมือนว่าฉันไม่สามารถส่งคำสั่ง (ซึ่งปัจจุบันคือรหัส Python) ไปยัง Terminal จากสคริปต์ PHP ของฉันได้อีกต่อไป

ฉันกำลังเดินไปในเส้นทางที่ถูกต้องโดยใช้ฟังก์ชัน exec() เพื่อดำเนินการในสิ่งที่ฉันต้องการหรือไม่ หรือฟังก์ชันนี้ดำเนินการเพียงคำสั่งเดียวและไม่ใช่หลายคำสั่งติดต่อกันใน Terminal เดียวกัน ฉันจำเป็นต้องใช้ฟังก์ชันอื่นที่ส่งคำสั่งไปยังเชลล์เฉพาะเพื่อให้คำสั่งทั้งหมดถูกดำเนินการใน Terminal เดียวกันหรือไม่

นี่คือโค้ดที่ฉันพยายามส่งไปยัง Terminal เพื่อเรียกใช้ล่าม 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 ไม่สามารถพูดได้ว่าฉันรู้จักมายา แต่ถ้าฉันต้องลองดู มันจะทำงานเหมือนกับ 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 แล้วคำสั่งที่ส่งไปยัง Terminal จะเป็นอย่างไร ?   -  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