Bagaimana cara mengirim perintah dari skrip PHP ke Terminal yang menjalankan juru bahasa Python?

Saya ingin mengakses Terminal dari skrip PHP untuk membuka Maya versi mandiri dan kemudian menjalankan skrip Python di Maya dari Terminal.

Saya sudah bisa mengirim perintah ke Terminal dari skrip PHP saya menggunakan fungsi exec(). Misalnya, saya sudah bisa membuka Maya dengan file .OBJ menggunakan kode berikut.

//Open Maya with .OBJ
$cmd='open -a /Applications/Autodesk/maya2015/maya.app /Applications/AMPPS/www/webGL/upload/Character.obj';
exec($cmd);

Saya kemudian menemukan bahwa saya dapat membuka juru bahasa Maya Python di Terminal menggunakan direktori ini: /Applications/Autodesk/maya2016/Maya.app/Contents/bin/mayapy

Ketika direktori ini dijalankan di Terminal, ia menjalankan juru bahasa Maya Python. Ketika penerjemah sedang berjalan sepertinya saya tidak lagi dapat mengirim perintah (yang sekarang menjadi kode Python) ke Terminal dari skrip PHP saya.

Apakah saya mengambil jalur yang benar dengan menggunakan fungsi exec() untuk melakukan apa yang ingin saya lakukan? Atau apakah fungsi ini hanya menjalankan satu perintah dan bukan beberapa perintah secara berurutan di Terminal yang sama? Apakah saya perlu menggunakan fungsi berbeda yang mengirimkan perintah ke shell tertentu sehingga semua perintah dijalankan di Terminal yang sama?

Berikut adalah kode yang saya coba kirim ke Terminal untuk menjalankan juru bahasa Maya Python dan kemudian mengimpor perpustakaan mandiri Maya dan menginisialisasinya.

//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 sumber
comment
gunakan popen(), yang memungkinkan Anda melakukan percakapan dua arah dengan proses eksternal.   -  person Marc B    schedule 23.06.2016
comment
Kedengarannya seperti masalah X-Y... apakah Anda yakin Anda perlu memanggil python dari php? Paling tidak, mengapa tidak menulis skrip python untuk ditafsirkan daripada membuka python dan memberinya masukan dalam mode interaktif?   -  person Chris Sprague    schedule 23.06.2016
comment
@ChrisSprague ya sebenarnya itu adalah metode yang ideal. Saya sudah menulis skrip Python, lalu bagaimana skrip ini ditafsirkan dalam Maya? Sebuah perintah perlu dipanggil dari skrip PHP karena berada di server dan dijalankan oleh permintaan AJAX dari halaman web saya.   -  person skelto    schedule 23.06.2016
comment
@skelto tidak bisa bilang saya kenal maya, tapi kalau dilihat sekilas, itu akan dijalankan seperti mayapy /path/to/script.py. Pastikan mayapy ditambahkan ke $PATH Anda -- yaitu tambahkan maya /bin ke jalur Anda   -  person Chris Sprague    schedule 23.06.2016
comment
@ChrisSprague oke saya akan mencobanya, terima kasih atas bantuannya!   -  person skelto    schedule 23.06.2016
comment
@skelto ya, semoga berhasil. Saya akan mencoba menjalankan mayapy dari terminal untuk melihat apakah itu diambil di jalur Anda; jika belum, berikut cara menambahkan ke PATH.   -  person Chris Sprague    schedule 23.06.2016
comment
@ChrisSprague hanya untuk memperjelas, jika ini adalah jalur saya ke juru bahasa Maya Python - /Applications/Autodesk/maya2016/Maya.app/Contents/bin/mayapy dan ini adalah jalur ke skrip Python yang ingin saya jalankan di Maya - /Users/Gal/Desktop/Mark's Humane Files/Final Python Files/CreateSkinnedCharacter.py, lalu seperti apa tampilan perintah yang dikirim ke Terminal ?   -  person skelto    schedule 23.06.2016
comment
@skelto Saya akan mengatakan /path/to/interp /path/to/script.py, tapi saya tidak tahu apakah itu cara kerja penerjemah Maya, hanya konvensi penerjemah biasa (ruby, python, bash, php, dll...)   -  person Chris Sprague    schedule 23.06.2016


Jawaban (1)


Anda tidak perlu memisahkan kode dengan mayapy, Anda dapat menjalankan skrip langsung dengan mayapy

test.py

import os
import maya.standalone
maya.standalone.initialize()
import maya.cmds as cmds
print dir(cmds)

Anda cukup memanggil skrip ini seperti ini

mayapy /your/path/test.py

Dalam kasus Anda

$cmd2="/Applications/Autodesk/maya2016/Maya.app/Contents/bin/mayapy /your/path/test.py";
shell_exec($cmd2);
person Achayan    schedule 23.06.2016