当前位置: 首页 > 面试题库 >

使用外部python脚本打开maya并在maya中运行另一个脚本

邓兴为
2023-03-14
问题内容

是否可以从Windows(或Linux中的bash)的命令提示符中调用脚本以打开Maya,然后在Maya中运行自定义脚本(每次运行时都可能更改)?我正在搜索比更改userSetup文件然后运行Maya更优雅的东西。

这里的目标是能够打开.mb文件,运行脚本以将场景定位在内部,设置通用的灯光集,然后将场景渲染到特定的位置和文件类型。我希望能够将其设置为计划任务,以检查目录中是否有新场景文件,然后打开maya并继续。

谢谢您的帮助!


问题答案:

对于这种情况,您可以使用Maya独立版本而不是完整的UI模式。它更快。对于此类批量计划作业是理想的选择。Maya独立版本只是Maya在没有GUI的情况下运行。初始化Maya独立版本后,可以导入并调用所需的任何脚本,作为原始调用脚本的一部分。首先给您一个例子:(随意使用它作为参考/修改它以满足您的需求)

首先,在脚本中独立初始化Maya。

import maya.standalone
maya.standalone.initialize("Python")

import maya.cmds as cmds
cmds.loadPlugin("Mayatomr") # Load all plugins you might need

这将使Maya正常运行。现在,我们打开和/或导入所有必要的文件(例如,灯光,模型等)

# full path to your Maya file to OPEN
maya_file_to_open = r"C:/Where/Ever/Your/Maya_Scene_Files/Are/your_main_maya_file.mb"

# Open your file
opened_file = cmds.file(maya_file_to_open, o=True)

# full path to your Maya file to IMPORT
maya_file_to_import = r"C:/Where/Ever/Your/Maya_Scene_Files/Are/your_maya_file.mb"

# Have a namespace if you want (recommended)
namespace = "SomeNamespaceThatIsNotAnnoying"

# Import the file. the variable "nodes" will hold the names of all nodes imported, just in case.
nodes = cmds.file(maya_file_to_import, i=True,
                          renameAll=True,
                          mergeNamespacesOnClash=False,
                          namespace=namespace,
                          returnNewNodes=True,
                          options="v=0;",
                          type="mayaBinary" # any file type you want. this is just an example.
                          )

#TODO: Do all your scene setup/ positioning etc. if needed here...
#Tip: you can use cmds.viewFit(cam_name, fitFactor=1) to fit your camera on to selected objects

现在我们将文件保存出来,并调用Maya Batch渲染器将其渲染出来

render_file = "C:/Where/Ever/Your/Maya_Scene_Files/Are/your_RENDER_file.mb"
cmds.file(rename=render_file)
cmds.file(force=True, save=True, options='v=1;p=17', type='mayaBinary')

import sys
from os import path
from subprocess import Popen

render_project = r"C:/Where/Ever/YourRenderProjectFolder"
renderer_folder = path.split(sys.executable)[0]
renderer_exec_name = "Render"
params = [renderer_exec_name]
params += ['-percentRes', '75']
params += ['-alpha', '0']
params += ['-proj', render_project]
params += ['-r', 'mr']
params += [render_file]
p = Popen(params, cwd=renderer_folder)
stdout, stderr = p.communicate()

而已!当然,必须使用Maya的Python解释器(Mayapy)运行脚本。

请检查文档以获取用于更多选项的所有命令,尤其是:
cmds.file()
cmds.viewFit()
cmds.loadPlugin()
子进程和Popen


另外,由于Python的出色功能,您可以使用sched(docs)之类的模块来安排该方法在Python代码中的运行。

希望这是有用的。玩得开心。干杯。



 类似资料:
  • 问题内容: 我想从另一个Python脚本运行一个Python脚本。我想像使用命令行一样传递变量。 例如,我会跑我的,将通过值(0,1,2,3)的列表迭代第一个脚本,并通过那些到第二脚本,然后,等 我发现了Stack Overflow问题1186789,这是一个类似的问题,但是ars的答案调用了一个函数,在这里我想运行整个脚本,而不仅仅是函数,而balpha的答案则调用了脚本,但没有参数。我将其更改

  • 所以我有主python脚本,我想从我的主文件中调用另一个python脚本,但是,每当我这样做的时候,我调用的脚本就会超过原来的脚本控制台中的主脚本?

  • 问题内容: 我尝试按照Go Docs进行操作,以调用仅从GO输出“ Hello”的python脚本,但到目前为止一直失败。 或者我也尝试过调用仅调用python脚本的shell脚本,但是也失败了: 有什么想法我将如何实现? 编辑 我按照注释中的建议解决了问题,并将完整路径添加到exec.Command()。 问题答案: 您是否尝试添加或,例如: 您可以在“ 如何在Golang中执行简单的Windo

  • 问题内容: 要启动一个Python脚本(它是需要用于运行OLED显示器)从终端,我必须使用下面的bash命令:。之后的那些参数很重要,否则,脚本将以默认设置运行,而在我的情况下,脚本将不会以默认设置启动。因此,需要那些参数。 当我需要从另一个python脚本启动脚本(而不是在终端上使用bash命令)时,就会出现问题。从父脚本启动我的python脚本之一。我用过了: 在我的父脚本中,但出现错误说明:

  • Originally developed at Sony Pictures Imageworks, imageworks-maya-reticle (spReticle) is a Maya C++ plugin plus MEL code which creates a reticle for a camera. It allows for various camera reference ma

  • 问题内容: 我正在编写脚本程序,并且在UI方面有些挣扎。我已经制作了几个UI,所有这些UI似乎都可以单独正常工作,但是我不知道如何将在UI中输入的数据用于其他功能。我正在尝试获取Gun类型(由用户在中选择),然后影响随后调用哪个UI。每种枪支类型均需要不同的滑块值集,因此我为每种滑块创建了不同的UI。我认为我需要将从BSG中选择的数据传递到函数中,以调用正确的(第二个)UI,但是运行它总是会跳转到