После просмотра readme для этого модуля nuke у меня возникает ощущение, что вы можете быть смущены тем, что на самом деле требуется для его использования.
subprocess.Popen(['X:\\apps\\Nuke6.1v5\\Nuke6.1.exe', '-t', 'X:\\apps\\Scripts\NUKE\\nukeExternalControl\\server.py'])
... Эта строка (которую я предполагаю, что вы фактически присваиваете переменную и либо блокируете ее, либо проверяете ее состояние), - это то, что требуется для запуска сервера без графического интерфейса с Nuke. Nuke, будучи интерпретатором Python, может запускать скрипт Python через nuke -t <script.py>
, следовательно, вы используете его для запуска вашего серверного процесса. Это заблокирует и подождет, пока вы будете использовать клиентский класс для связи.
Что, похоже, отсутствует в вашем вопросе - это больше контекста о том, как именно вы пытаетесь запустить эту конфигурацию сервер / клиент. Если вы пытаетесь выполнить обе части в одном и том же сценарии, то вам нужно запустить серверный процесс, как вы делаете, затем, возможно, на секунду спать (серверный процесс запускается довольно быстро), а затем запустить клиентский код, который делает связь.
Обновление
Реально, есть два способа запустить серверный процесс, как это очень ясно изложено в файле readme:
To start a command sever whenever Nuke is launched, add the following lines
to your Nuke menu.py:
---------------------------
import nukeExternalControl.server
nukeExternalControl.server.nuke_command_server()
---------------------------
Это то, что вы бы поместили в файл nuke menu.py или запустили вручную, запустив приложение Nuke. Теперь ваше приложение будет работать на сервере и позволит клиентам подключаться.
Если вы не хотите использовать лицензию с графическим интерфейсом и поддерживать ее работу с соединениями с сервером, тогда вы используете другой метод из командной строки X:\apps\Nuke6.1v5\Nuke6.1.exe -t X:\apps\Scripts\NUKE\nukeExternalControl\server.py
, который запускает сервер на основе терминала. Нет НИКАКОЙ причины, по которой я могу подумать, что вам нужно использовать подпроцесс для запуска сервера в вашем скрипте, когда они дают вам метод для его запуска.
Решение
После долгого разговора с ФП выяснилось, что он хотел сделать то, что предложила первая часть моего ответа. У него есть автономный скрипт, который хочет что-то сделать с помощью интерпретатора Python от Nuke (совершенно без головы без приложения с графическим интерфейсом Nuke). Используя этот сторонний модуль , он хочет запустить скрипт в подпроцессе, который будет действовать как сервер для терминала nuke. Затем он продолжит работу в своем коде для связи с ним с помощью класса клиента (он сам размещает серверный процесс и, скорее всего, использует циклический перебор).
Решением его проблемы было то, что ему нужно было time.sleep(2)
сразу после Попена, который запускает его server.py
. Ожидание нескольких секунд до полного запуска сервера позволило клиенту успешно подключиться.
И да, он теперь должен мне пиво.