<p>在浏览了这个核武器模块的自述文件之后,我感觉到您可能对使用它的实际需求感到困惑。在</p>
<p><code>subprocess.Popen(['X:\\apps\\Nuke6.1v5\\Nuke6.1.exe', '-t', 'X:\\apps\\Scripts\NUKE\\nukeExternalControl\\server.py'])</code></p>
<p>。。。这一行(我假设您实际分配给一个变量,或者阻塞它,或者检查它的状态),这是用Nuke启动一个基于非gui的服务器所必需的。作为一个python解释器,Nuke可以通过<code>nuke -t <script.py></code>运行python脚本,因此您可以使用它来启动服务器进程。这将阻止,并等待您使用<a href="https://github.com/Nvizible/NukeExternalControl/blob/master/nukeExternalControl/client.py" rel="nofollow">client class</a>进行通信。在</p>
<p>你的问题似乎缺少了更多关于如何运行这个服务器/客户机配置的上下文。如果您试图在同一个脚本中完成这两个部分,那么您需要像您正在做的那样启动服务器进程,然后可能会休眠一秒钟(服务器进程启动得非常快),然后运行建立连接的客户机代码。在</p>
<p><strong>更新</strong></p>
<p>实际上,有两种启动服务器进程的方法,如自述文件中所述:</p>
<pre><code>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()
-
</code></pre>
<p>这是你要放在核弹里的东西菜单.py或者用一个正在运行的Nuke应用程序手动启动它。您的应用程序现在将运行服务器进程并允许客户端连接。在</p>
<p>如果您不想使用GUI许可证并保持它运行到服务器连接,那么您可以使用命令行中的另一个方法来启动基于终端的服务器。当脚本中提供了启动服务器的方法时,我认为没有理由需要使用子进程来启动服务器。在</p>
<h2>解决方案</h2>
<p>在与手术医生长时间的交谈后,我发现他想做的是我第一部分的回答。他有一个独立的脚本,想用Nuke的python解释器(没有nukegui应用程序,完全没有头)。<a href="https://github.com/Nvizible/NukeExternalControl" rel="nofollow">Using this 3rd party module</a>,他想在一个子进程中启动脚本,该进程将充当nuke终端的服务器。然后,他将在代码中使用client类与它通信(他自托管一个服务器进程,并与之进行sorta循环通信)。在</p>
<p>他的问题的解决方案是,他需要在启动他的<code>server.py</code>的人之后<code>time.sleep(2)</code>。等待服务器完全启动几秒钟可使客户端成功连接。在</p>
<p>是的,他现在欠我一杯啤酒。在</p>