[英]Transferring a mesh from one process to another in PYTHON
我一直在為此絞盡腦汁,但我還沒有想到任何東西。 我希望我的腳本在另一個已經啟動的進程中執行一個 .py 文件。 我打開了一個 Maya 進程,例如在 modo 中,我想在那個確切的 Maya 中啟動文件 hello.py (print 'hello.')。
我已經獲得了該 Maya 進程的 PID,但不知道如何實際發送要執行的命令。
子進程或信號模塊中是否有一些屬性/標志我可能會丟失? 還是以另一種方式完成?
import os
openedMaya = []
r = os.popen('tasklist /v').read().strip().split('\n')
for i in range(len(r)):
s = r[i]
if 'maya.exe' in s and ': untitled' in s:
openedMaya.append(s)
mayaPID = openedMaya.split('maya.exe')[1].split('Console')[0]
我需要一個可以在該 Maya 進程中執行 hello.py 的命令。
您可以使用RPyC
作為橋梁,以便您可以從一個軟件到另一個軟件進行通信。 這個想法是您使用RPyC
在 Maya 中運行一個空閑服務器,其中PYTHONPATH
也指向您的hello.py
腳本。 此服務器在 session 中保持活動狀態,但用戶不應注意到它的存在。
然后在您的其他軟件中,您使用RPyC
使用與服務器相同的端口廣播消息,以便它在 Maya 中觸發它。 然后這將運行您的命令。
它的開銷稍大一些,但我已經能夠成功地將它用於獨立工具來觸發 Maya 中的事件。 至於使用subprocess
,您可以使用它在新的 Maya session 中運行命令,但我認為沒有辦法將它用於現有的。
希望這會推動您朝着正確的方向前進。
也許更簡單的方法是使用中間文件傳輸您的網格。 一個進程創建文件,另一個進程(在主機應用程序內運行)讀取它。
感謝您的建議,最后我通過啟動 mel 命令(在啟動時)打開maya端口找到了解決方案:
commandPort -n ":<some_port>";
並通過套接字從 modo 連接到該端口:
HOST = '127.0.0.1'
PORT = <some_port>
ADDR=(HOST,PORT)
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(ADDR)
client.send(<message_that_you_want_to_send)
data = client.recv(1024)
client.close()
只要我發送 mel 命令,我就可以在打開的 Maya 中做任何我想做的事情。
不過感謝您的幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.