Im not sure if it is my thread from back in november you are refering to, but I did find a good solution for us back then. I create the Nuke scripts, then select the media in the timeline view and hit a custom menu button connected to this funciton (note that our scripts automatically create a tag called "script" on the media):
#Use this script to add a auto floder creation option. #All you need is the \AutoWriteFolder.py file in your .nuke folder def folderfix(): import hiero HasExecuted = False print "Fixing Path AutoCreation" for item in hiero.ui.TimelineEditor.selection(hiero.ui.getTimelineEditor(hiero.ui.activeSequence())): for items in item.tags(): Tags = items.metadata() if Tags.hasKey("script"): print Tags.value("script") subprocess.Popen([nuke.EXE_PATH,'-t',os.path.dirname(os.path.realpath(__file__))+'\AutoWriteFolder.py', Tags.value("script")]) HasExecuted = True if not HasExecuted: nuke.message("ERROR - Did not patch any files! \nMake sure that you select item(s) in the timline with a NukeScript tag.") The key part here is "subprocess.Popen" that will make the script run in its own nuke thread The AutoWriteFolder.py looks like this: import nuke import os import sys def RecursiveFindNodes(nodeClass, startNode): if startNode.Class() == nodeClass: yield startNode elif isinstance(startNode, nuke.Group): for child in startNode.nodes(): for foundNode in RecursiveFindNodes(nodeClass, child): yield foundNode if len ( sys.argv ) != 2: print 'Usage: NUKE autoWriteFolder.py <nuke_script>' + str(len ( sys.argv )) sys.exit(-1) inScript = sys.argv[1] nuke.scriptOpen( inScript ) allWriteNodes = [w for w in RecursiveFindNodes('Write', nuke.root())] for write in allWriteNodes: write['beforeRender'].setValue( """if not os.path.exists(os.path.dirname(nuke.thisNode().knob("file").value())): os.makedirs(os.path.dirname(nuke.thisNode().knob("file").value()))""" ) nuke.scriptSave( inScript ) On Wed, May 6, 2015 at 12:23 PM, Fabian Fischer <i...@visualplastic.net> wrote: > Hi, > has anyone come up with a solution for this yet? There is a thread in the > nuke-user list back from november, but no real solution was found. > For nuke and nuke x, I'm calling this function (it is within my own > module): > > def createWriteDir(): > import os > file = nuke.filename(nuke.thisNode()) > dir = os.path.dirname( file ) > osdir = nuke.callbacks.filenameFilter( dir ) > if os.path.exists(osdir) == False: > if nuke.ask(osdir+"\nOutput dir does not exist. Create?"): > os.makedirs( osdir ) > > I'm calling it from init.py: > > nuke.addBeforeRender(fustoms.createWriteDir) > > This seems not to work for Nuke Studio when rendering from the timeline - > which is really annoying... > > Any help highly appreciated! Thank you, > > Fabian > _______________________________________________ > Nuke-python mailing list > Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/ > http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python >
_______________________________________________ Nuke-python mailing list Nuke-python@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/ http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python