簡體   English   中英

在 PYTHON 中將網格從一個進程轉移到另一個進程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM