2016-05-24 5 views
2

Я пытаюсь отправить майя для рендеринга фермы на Deadline Software.Maya to deadline job submission python command

Python Command for Manual Представление задания Майя в крайний срок.

import sys 
import subprocess 
import maya.cmds as cmds 

deadline = "C:\\Program Files\\Thinkbox\\Deadline\\bin\\deadlinecommand.exe" 
maya_exe = "C:\\Program Files\\Autodesk\\Maya2015\\bin\\render.exe" 

file_path = cmds.file(q=True, location=True) 

command = '%s ' \ 
      '-SubmitCommandLineJob ' \ 
      '-executable "%s" ' \ 
      '-name "File Name" ' \ 
      '"%s" ' % (deadline, maya_exe, file_path) 
process = subprocess.Popen(command, stdout=subprocess.PIPE) 
lines_iterator = iter(process.stdout.readline, b"") 
for line in lines_iterator: 
    print(line) 
    sys.stdout.flush() 

любые способы python добавить Maya в крайний срок ..?

+0

несвязанный: 1- вы можете использовать 'r'C: \ Program .. '' вместо '' C: \\ Program ..' '-ноть префикс' r''' (это строковый литерал). 2- Используйте неявное продолжение строки в круглых скобках вместо обратных косых черт и именованных форматов для чтения: 'command = ('{deadline}' '...' '.." {maya_exe} "' ... '" {file_path} "') .format (** vars())' 3. Вам не нужно перенаправлять вывод, если все, что вы делаете, это эхо-сообщение для stdout: drop 'stdout = PIPE' и использовать только' subprocess.check_call (команда) '. || Какой у Вас вопрос? Как воспроизвести команду в своем вопросе, но без программы «deadlinecommand»? – jfs

+0

@ J.F.Sebastian Спасибо, что поделились удивительными советами python. Я пытаюсь запустить/отправить файл Maya в конечную ферму рендеринга с помощью python. –

+1

какая у вас проблема с вашим текущим скриптом? Чего вы ожидаете? Что происходит вместо этого? (описать шаг за шагом). Если вы получаете какие-либо ошибки; включите их в свой вопрос как есть. Укажите, какие версии программного обеспечения вы используете (ОС, python и т. Д.). [править] вопрос и поставить информацию там. Я не знаю, что * «отправить майя-файл в конечную рендерную ферму с помощью python» *, но эта информация может помочь другим ответить на вопрос. – jfs

ответ

0

Наконец, я получил способ отправить майю рендеринг рабочих мест для конечного пользователя. все, что нам нужно сделать, это написать 2 файла задания для крайнего срока. 1. maya_deadline_job.job 2. maya_deadline_info.job

и передать эти файлы в качестве аргументов в deadlinecommand.exe , например:

deadlinecommand.exe "maya_deadline_info.job" "maya_deadline_info.job" 

Вот мой питон код

""" 
This script will submit current file to deadline for render 
""" 
import os 
import sys 
import subprocess 
import maya.cmds as cmds 


def maya_deadline_job(): 
    """ 
    this function will collect scene file information and write a job file 
    :return: 
    """ 
    renderer_name = 'File' 
    version = cmds.about(version=True) 
    project_path = cmds.workspace(q=True, directory=True) 
    width = cmds.getAttr("defaultResolution.width") 
    height = cmds.getAttr("defaultResolution.height") 
    output_file_path = cmds.workspace(expandName="images") 
    output_file_prefix = cmds.getAttr("defaultRenderGlobals.imageFilePrefix") 
    scene_file = cmds.file(q=True, location=True) 
    info_txt = 'Animation=1\n' \ 
       'Renderer={}\n' \ 
       'UsingRenderLayers=0\n' \ 
       'RenderLayer=\n' \ 
       'RenderHalfFrames=0\n' \ 
       'LocalRendering=0\n' \ 
       'StrictErrorChecking=1\n' \ 
       'MaxProcessors=0\n' \ 
       'AntiAliasing=low\n' \ 
       'Version={}\n' \ 
       'Build=64bit\n' \ 
       'ProjectPath={}\n' \ 
       'ImageWidth={}\n' \ 
       'ImageHeight={}\n' \ 
       'OutputFilePath={}\n' \ 
       'OutputFilePrefix={}\n' \ 
       'Camera=\n' \ 
       'Camera0=\n' \ 
       'Camera1=RENDERShape\n' \ 
       'Camera2=frontShape\n' \ 
       'Camera3=perspShape\n' \ 
       'Camera4=sideShape\n' \ 
       'Camera5=topShape\n' \ 
       'SceneFile={}\n' \ 
       'IgnoreError211=0'.format(renderer_name 
             version, 
             project_path, 
             width, 
             height, 
             output_file_path, 
             output_file_prefix, 
             scene_file) 

    maya_deadline_job_file = r'{}\maya_deadline_job.job'.format(os.getenv('TEMP')) 
    with open(maya_deadline_job_file, 'w') as job_file: 
     job_file.write(info_txt) 
    return maya_deadline_job_file 


def maya_deadline_info(): 
    """ 
    this function will collect maya deadline information and write a job file 
    :return: 
    """ 
    info_txt = 'Plugin=MayaBatch\n' \ 
       'Name=MY_FILE_NAME\n' \ 
       'Comment=Render Launch by Python\n' \ 
       'Pool=none\n' \ 
       'MachineLimit=0\n' \ 
       'Priority=50\n' \ 
       'OnJobComplete=Nothing\n' \ 
       'TaskTimeoutMinutes=0\n' \ 
       'MinRenderTimeMinutes=0\n' \ 
       'ConcurrentTasks=1\n' \ 
       'Department=\n' \ 
       'Group=none\n' \ 
       'LimitGroups=\n' \ 
       'JobDependencies=\n' \ 
       'InitialStatus=Suspended\n' \ 
       'OutputFilename0=C:/Users/raijv/Documents/maya/projects/default/images/masterLayer_2.iff.????\n' \ 
       'Frames=1-10\n' \ 
       'ChunkSize=1' 

    maya_deadline_info_file = r'{}\maya_deadline_info.job'.format(os.getenv('TEMP')) 
    with open(maya_deadline_info_file, 'w') as job_file: 
     job_file.write(info_txt) 
    return maya_deadline_info_file 


def submit_to_deadline(): 
    """ 
    this function will send current scene to deadline for rendering 
    :return: 
    """ 
    deadline_cmd = r"C:\Program Files\Thinkbox\Deadline\bin\deadlinecommand.exe" 
    job_file = maya_deadline_job() 
    info_file = maya_deadline_info() 
    command = '{deadline_cmd} "{job_file}" "{info_file}"'.format(**vars()) 
    process = subprocess.Popen(command, stdout=subprocess.PIPE) 
    lines_iterator = iter(process.stdout.readline, b"") 
    # Lets print the output log to see the Error/Success 
    for line in lines_iterator: 
     print(line) 
     sys.stdout.flush() 

submit_to_deadline() 

Редактировать info -

Не использовать cmds.getAttr ("defaultRenderGlobals.currentRenderer" в рендерере Переменная _name. используйте «Файл», в котором будут выполняться операции с надстройкой слоев.

1

Я написал экспортера для работы с ядерным оружием внутри майи. Он также должен работать с майей (даже если я не понимаю, что вы не используете сценарий крайнего срока), обратите внимание, что крайний срок для nuke имеет подателя в .py):

Файл с двумя частями, который я редактировал с помощью xml : nuke_submit_info.job nuke_plugin_info.job Найти одинаковые файлы для майи, и он должен сделать трюк

а потом направляющий их «» deadlinecommand

def sumbit2deadline(): 
    FileName = "nuke_submit_info" 
    JobInfo = PathSaveFiles + FileName + ".job" 
    FileName = "nuke_plugin_info" 
    JobPlugIn = PathSaveFiles + FileName + ".job" 
    FileName = "NukeTemplate" 
    JobFile = PathSaveFiles + FileName + ".nk" 
    command = "deadlinecommand" + " " + JobInfo + " " + JobPlugIn + " " + JobFile 
    subprocess.Popen(command) 
+0

PathSaveFiles относится к пути, то есть: C:/tmp / – DrWeeny

Смежные вопросы