让Popen等待第一个命令完成,然后启动nex

2024-10-06 07:43:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着运行一个程序,并给程序提供这样的脚本:

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启动。在


Tags: appspy命令程序脚本程序运行serverscripts
2条回答

在浏览了这个核武器模块的自述文件之后,我感觉到您可能对使用它的实际需求感到困惑。在

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进行通信。在

你的问题似乎缺少了更多关于如何运行这个服务器/客户机配置的上下文。如果您试图在同一个脚本中完成这两个部分,那么您需要像您正在做的那样启动服务器进程,然后可能会休眠一秒钟(服务器进程启动得非常快),然后运行建立连接的客户机代码。在

更新

实际上,有两种启动服务器进程的方法,如自述文件中所述:

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

这是你要放在核弹里的东西菜单.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是否已完成“引导”。在

相关问题 更多 >