2016-05-24 18 views
2

Ich versuche zu senden maya Rendern Farm von Deadline Software zu rendern.Maya zu Frist Job-Einreichung Python-Befehl

Python-Befehl für manuelle Auftragseinreichung Maya zum Stichtag.

Alle Python-Möglichkeiten zum Hinzufügen von Maya-Rendern auf Deadline ..?

+0

ohne Bezug: 1- Sie könnten 'r'C: \ Program .. '' anstelle von '' C: \\ Program .. '' verwenden -notieren Sie das 'r'''-Präfix (es ist ein Raw-String-Literal). 2- Verwenden Sie implizite Zeilenfortsetzung in Klammern anstelle von umgekehrten Schrägstrichen und benannte Formatvariablen zur besseren Lesbarkeit: 'command = ('{deadline}' ... '' .. '{maya_exe}' '...'" {file_path} "') .format (** vars())' 3- Sie müssen die Ausgabe nicht umleiten, wenn alles, was Sie tun, es auf stdout zurückgibt: drop 'stdout = PIPE' und verwenden Sie nur' subprocess.check_call (command) '. || Was ist deine Frage? Wie man den Befehl in Ihrer Frage aber ohne "Deadlinecommand" Programm reproduziert? – jfs

+0

@ J.F.Sebastian Danke für das Teilen der tollen Python-Tipps. Ich versuche, Maya-Datei zu Deadline-Farm von Python zu starten/zu übermitteln. –

+1

Welches Problem haben Sie mit Ihrem aktuellen Skript? Was erwartest du zu passieren? Was passiert stattdessen? (Schritt für Schritt beschreiben). Wenn Sie irgendwelche Fehler bekommen; schließe sie in deine Frage ein. Erwähnen Sie, welche Software-Versionen Sie verwenden (OS, Python, etc). bearbeite die Frage und lege die Infos dort hin. Ich weiß nicht, was * "maya-Datei an Termin übergeben Farm von Python zu übermitteln" *, aber diese Informationen können anderen helfen, die Frage zu beantworten. – jfs

Antwort

0

Schließlich tun, ich habe die Art und Weise maya zu senden Render-Jobs zu Termin-Render-Farm-Software. alles, was wir tun müssen, ist 2 Job-Dateien für die Deadline schreiben. 1. maya_deadline_job.job 2. maya_deadline_info.job

und diese Dateien als Argumente in deadlinecommand.exe zum Beispiel passieren:

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

Hier ist mein Python-Code

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

bearbeiten info -

Verwenden Sie nicht cmds.getAttr ("defaultRenderGlobals.currentRenderer" in Renderer _name Variable. Verwenden Sie die Datei, die Layer über den Renderer bringt.

1

Ich hatte einen Exporteur für Nuke Jobs in Maya geschrieben. Es sollte auch mit Maya funktionieren (auch wenn ich Sie nicht verstehe, verwenden Sie nicht das Deadline-Skript - beachten Sie, dass Deadline für Nuke einen Submitter in .py hat):

Es gibt zwei Teile Datei, die ich mit XML bearbeitet habe : nuke_submit_info.job nuke_plugin_info.job die gleichen Dateien für maya finden und es sollte den Trick

und dann mit ‚deadlinecommand‘ Absenden

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 bezieht sich auf einen Pfad, d. H. C:/tmp / – DrWeeny