Skip to content Skip to sidebar Skip to footer

Running List Of Cmd.exe Commands From Maya In Python

I am writing a maya python script to batch render a scene into jpgs then use ffmpeg to turn them into a mov. Currently the script saves a string of commands as a bat file which wor

Solution 1:

first_process = subprocess.Popen(r'RenderCommand', stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True )
first_out,first_err = first_process.communicate()
first_exicode = first_process.returncode
print(first_out)
ifstr(first_exicode) != '0':
    print(first_err)

second_process = subprocess.Popen(r'SecondCommand', stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True )
second_out,second_err = second_process.communicate()
second_exicode = second_process.returncode
print(second_out)
ifstr(second_exicode) != '0':
    print(second_err)

third_process = subprocess.Popen(r'ConvertCommand', stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True )
third_out,third_err = third_process.communicate()
third_exicode = third_process.returncode
print(third_out)
ifstr(third_exicode) != '0':
    print(third_err)

Important note:

During the execution of each Popen(), Maya's GUI will be frozen. This can be really inconvenient especially if you have a lot of frames to render.

I'd recommand you to separate your Render and Convert calls from your main script to avoid this.

You can do it this way:

In your main script (where you would have called your Popen():

subprocess.Popen(r'mayapy.exe R:\paul\Trash\render_and_convert.py 50 100 150', False)

This command will not freeze Maya's GUI. You can pass arguments from your main script to render_and_convert.py (file paths, start/end frames, etc...)

render_and_convert.py:

import sys
import subprocess
import maya.standalone as std
std.initialize(name='python')
import maya.cmds as cmds
import maya.mel as mel

# store the arguments in variables
first_argument  = sys.argv[1] # =50
second_argument = sys.argv[2] # =100
third_argument  = sys.argv[3] # =150

first_process = subprocess.Popen(r'RenderCommand ' + first_argument + ' ' + second_argument,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True )
first_out,first_err = first_process.communicate()
first_exicode = first_process.returncode
print(first_out)
ifstr(first_exicode) != '0':
    print(first_err)

second_process = subprocess.Popen(r'SecondCommandWithoutArgs', stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True )
second_out,second_err = second_process.communicate()
second_exicode = second_process.returncode
print(second_out)
ifstr(second_exicode) != '0':
    print(second_err)

third_process = subprocess.Popen(r'ConvertCommand ' + third_argument,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True )
third_out,third_err = third_process.communicate()
third_exicode = third_process.returncode
print(third_out)
ifstr(third_exicode) != '0':
    print(third_err)

Post a Comment for "Running List Of Cmd.exe Commands From Maya In Python"