在之前的一篇文中介绍了在maya中生成nuke工程脚本的方法,后来部门负责人希望更简单一些,能在那个功能面板里提交deadline农场渲染更好,这样就不用打开nuke手动提交了,省去了在两个软件直接来回切换的冗余工作。
于是开始结合deadline提交原理分析这个需求。首先行业内大部分农场软件都是UI封装一堆命令行的方式,那么我们提交任务也完全可以跳过提交任务的设置界面,直接用subprocess.Popen()来运行提交任务的命令行即可。
仔细读了SubmitNukeToDeadline.py及DeadlineNukeClient.py,剥离出一行最基本的代码:
subprocess.Popen(["C:\Program Files\Thinkbox\Deadline7\bin\deadlinecommand.exe", "D:/nuke_submit_info.job", "D:/nuke_plugin_info.job"])
subprocess.Popen()函数中有三个参数,第一个是本机deadline客户端执行文件路径,第二个提交信息的参数文件路径,第三个是软件信息文件的路径。也就是说我们只需要构建后面两个文件,就可以在任意软件环境利用subprocess.Popen()提交Nuke任务到deadline渲染农场中了。
放一个构建这两个参数文件的函数吧:
def submit_script_to_deadline(): #create plugin file plugin_InfoFile = "D:/nuke_plugin_info.job" plugin_fileHandle = open( plugin_InfoFile, "w" ) plugin_fileHandle.write("SceneFile=%s "%(projpath)) plugin_fileHandle.write("Version=8.0 Threads=0 RamUse=0 BatchMode=False BatchModeIsMovie=False NukeX=True UseGpu=False ProxyMode=False EnforceRenderOrder=False ContinueOnError=False Views= StackSize=0 ") plugin_fileHandle.close() #create submit file submit_InfoFile = "D:/nuke_submit_info.job" submit_fileHandle = open( submit_InfoFile, "w" ) submit_fileHandle.write("Plugin=Nuke ") projreg = re.compile('S+\\(w+.nk)') matchgroup_2 = projreg.match(projpath) projectname = matchgroup_2.group(1) submit_fileHandle.write("Name=%s "%(projectname)) submit_fileHandle.write("Comment= Department= Pool=none SecondaryPool= Group=none Priority=50 MachineLimit=0 TaskTimeoutMinutes=0 EnableAutoTimeout=False ConcurrentTasks=1 LimitConcurrentTasksToNumberOfCpus=True LimitGroups= JobDependencies= OnJobComplete=Nothing ") submit_fileHandle.write("Frames=%s-%s "%(startframe,endframe)) submit_fileHandle.write("ChunkSize=10 Whitelist= OutputFilename0=%s"%(writepath)) submit_fileHandle.close()