0
votes

Transférer un maillage d'un processus à un autre dans PYTHON

Je me suis fêlé la tête à ce sujet, mais rien ne me vient à l'esprit pour le moment. Je veux que mon script exécute un fichier .py dans un autre processus déjà lancé. J'ai un processus maya ouvert, et à l'intérieur, par exemple, modo, je veux démarrer le fichier hello.py (imprimer «bonjour!») À l'intérieur de ce Maya exact. comment envoyer une commande à exécuter.

y a-t-il un attribut / indicateur dans un sous-processus ou des modules de signal qui pourraient me manquer? ou est-ce fait d'une autre manière?

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]

J'ai besoin d'une commande qui pourrait exécuter hello.py dans ce processus maya.


2 commentaires

vous pouvez utiliser commandPort, socket et thread pour cela


Exactement comment je l'ai fait. Merci!


3 Réponses :


1
votes

Vous pouvez utiliser RPyC pour agir comme un pont afin de pouvoir communiquer d'un logiciel à un autre. L'idée est que vous utilisez RPyC pour exécuter un serveur inactif dans Maya, où PYTHONPATH pointe également vers votre script hello.py . Ce serveur reste actif dans la session, mais l'utilisateur ne doit pas remarquer qu'il existe.

Ensuite, dans votre autre logiciel, vous utilisez RPyC pour diffuser un message en utilisant le même port que le serveur afin qu'il le déclenche dans Maya. Cela exécuterait alors votre commande.

C'est un peu plus de frais généraux, mais j'ai pu l'utiliser avec succès pour des outils autonomes pour déclencher des événements dans Maya. En ce qui concerne l'utilisation du sous-processus , vous pouvez l'utiliser pour exécuter une commande dans une nouvelle session Maya, mais je ne pense pas qu'il existe un moyen de l'utiliser pour une session existante .

J'espère que cela vous pousse dans la bonne direction.


0 commentaires

0
votes

Peut-être qu'un moyen plus simple serait de transférer votre maillage en utilisant un fichier intermédiaire. Un processus crée le fichier, un autre processus (exécuté dans l'application hôte) le lit.


0 commentaires

0
votes

Merci pour les conseils, à la fin j'ai trouvé une solution en ouvrant le port de maya, en lançant une commande mel (au démarrage):

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()

et en me connectant de modo à ça port via socket:

commandPort -n ":<some_port>";

et je suis capable de faire tout ce que je veux à l'intérieur de cette maya ouverte, tant que j'envoie des commandes mel.

Merci pour l'aide cependant!


0 commentaires