Here’s the basic skeleton of a Python script that calls xsibatch -processing -script on all scene files in a given folder.
Python command line:
The python script takes two arguments: the root folder for the location of the scene files, and the name of the script file to run with xsibatch -script.
python process_scenes.pys --dir ""C:\Program Files\Autodesk\Softimage 2013 SP1\Data\XSI_SAMPLES\Scenes" --script "test.pys"
process_scenes.pys:
The python script takes care of finding all the scene files, and then running xsibatch -processing -script on each .scn file.
import os
import fnmatch
import subprocess
import sys
import getopt
XSI_BINDIR=r"C:\\Program Files\\Autodesk\\Softimage 2013 SP1\\Application\\bin"
opts, extraparams = getopt.getopt(sys.argv[1:], "d:s:", ["dir=","script="])
#
# Get root directory to scan for scene files
#
SCENES_DIR="C:\\Program Files\\Autodesk\\Softimage 2013 SP1\\Data\\XSI_SAMPLES\\Scenes\\OLD"
SCRIPT="test1.pys"
for o,p in opts:
if o in ['-d','--dir']:
SCENES_DIR = p
elif o in ['-s','--script']:
SCRIPT = p
#
# Generator function for finding files
#
def find_files(directory, pattern):
for root, dirs, files in os.walk(directory):
for basename in files:
if fnmatch.fnmatch(basename, pattern):
filename = os.path.join(root, basename)
yield filename
#
# Open each scene file and run the specified script
#
for scn in find_files(SCENES_DIR, '*.scn'):
sXsiBatch = "%s\\xsibatch" % XSI_BINDIR
subprocess.call( [ sXsiBatch, '-processing', '-script', SCRIPT, '-args', '-sSceneName', scn ] )
Softimage script test.pys:
A simple test script to run with xsibatch. Note that because the function is named “main”, I don’t have to specify that on the xsibatch command line. I just have to specify the arguments.
def main( sSceneName ):
LogMessage( sSceneName )