我试着运行一个程序,并给程序提供这样的脚本:
subprocess.Popen(['X:\\apps\\Nuke6.1v5\\Nuke6.1.exe', '-t', 'X:\\apps\\Scripts\NUKE\\nukeExternalControl\\server.py'])
我的问题是程序需要几秒钟才能完成启动。所以,当程序启动时,Popen会运行下一个命令,当然,因为程序没有启动并运行,所以出错了。所以我的问题是如何告诉Popen等待第一个应用程序运行,然后执行Popen的下一个部分。。有人吗??在
更新
^{pr2}$解决方案
所以!多亏了jdi,问题已经解决了!他把这个问题和我解决了很长时间。。。非常感谢!在
回答:
我需要在Popen
命令之后使用time.sleep()
,因为我的服务器在与它通信之前没有等待nuke启动。在
在浏览了这个核武器模块的自述文件之后,我感觉到您可能对使用它的实际需求感到困惑。在
subprocess.Popen(['X:\\apps\\Nuke6.1v5\\Nuke6.1.exe', '-t', 'X:\\apps\\Scripts\NUKE\\nukeExternalControl\\server.py'])
。。。这一行(我假设您实际分配给一个变量,或者阻塞它,或者检查它的状态),这是用Nuke启动一个基于非gui的服务器所必需的。作为一个python解释器,Nuke可以通过
nuke -t <script.py>
运行python脚本,因此您可以使用它来启动服务器进程。这将阻止,并等待您使用client class进行通信。在你的问题似乎缺少了更多关于如何运行这个服务器/客户机配置的上下文。如果您试图在同一个脚本中完成这两个部分,那么您需要像您正在做的那样启动服务器进程,然后可能会休眠一秒钟(服务器进程启动得非常快),然后运行建立连接的客户机代码。在
更新
实际上,有两种启动服务器进程的方法,如自述文件中所述:
这是你要放在核弹里的东西菜单.py或者用一个正在运行的Nuke应用程序手动启动它。您的应用程序现在将运行服务器进程并允许客户端连接。在
如果您不想使用GUI许可证并保持它运行到服务器连接,那么您可以使用命令行中的另一个方法来启动基于终端的服务器。当脚本中提供了启动服务器的方法时,我认为没有理由需要使用子进程来启动服务器。在
解决方案
在与手术医生长时间的交谈后,我发现他想做的是我第一部分的回答。他有一个独立的脚本,想用Nuke的python解释器(没有nukegui应用程序,完全没有头)。Using this 3rd party module,他想在一个子进程中启动脚本,该进程将充当nuke终端的服务器。然后,他将在代码中使用client类与它通信(他自托管一个服务器进程,并与之进行sorta循环通信)。在
他的问题的解决方案是,他需要在启动他的
server.py
的人之后time.sleep(2)
。等待服务器完全启动几秒钟可使客户端成功连接。在是的,他现在欠我一杯啤酒。在
如果你说“next command/thing”时引用的是
'X:\\apps\\Scripts\NUKE\\nukeExternalControl\\server.py'
,那么你就很困惑了。这是一个传递给nuke.exe
的命令行参数(与执行dir C:\
时传递C:\
的方式相同)。在根本没有办法从python端控制
nuke.exe
做什么。。。您必须在server.py
中检查exe是否已完成“引导”。在相关问题 更多 >
编程相关推荐