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.
3 Réponses :
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.
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.
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!
vous pouvez utiliser commandPort, socket et thread pour cela
Exactement comment je l'ai fait. Merci!