That's what I was guessing for the subprocess. My comment is mostly to tell
Fabian that if that's too much for his needs, it would be doable to
simplify.
On 6 May 2015 19:44, "Mads Lund" <[email protected]> wrote:

> Fabian:
> I think that you could somehow force Nuke Studio to do so, but we also
> need it for the artists as they don't want to do foldercreation them
> selves. I know they are working on a solution to this problem, we just
> don't know when its ready.
>
> Erwan:
> The code can be condensed yes, but it is written for our demands (like the
> tag check)
> The reason why it uses a subprocess is that Nuke Studio doesnt seem to be
> able to execude code inside a external nuke project file. Using the
> subprocess i can launch a window-less version of Nuke and execute any code
> in there within a millisecond. If you had to do that with a windowed nuke
> it would take ages.
>
>
> On Wed, May 6, 2015 at 1:33 PM, Erwan Leroy <[email protected]> wrote:
>
>> Quickly reading through the code, I have a feeling this could be
>> condensed a lot. The OS module can create folders, I don't see the point of
>> going through a subprocess. Also this whole script tag thing could just be
>> skipped.
>> Then I haven't used python for nuke studio yet so I might be entirely
>> wrong.
>> On 6 May 2015 19:24, <[email protected]> wrote:
>>
>>>  Hi Mads,
>>>
>>> thank you for sharing your code! this looks good :)
>>> But still I'm wondering that this can't be as simple as it is with
>>> standard nuke. I hoped to get away with something that works for all nuke
>>> flavours. Something like telling the "backgound-render-nuke-instance" to
>>> execute 'nuke.addBeforeRender(fustoms.createWriteDir)' when it starts the
>>> thread?
>>>
>>> cheers,
>>> Fabian
>>>
>>> Am 06.05.2015 um 12:40 schrieb Mads Lund:
>>>
>>> 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 <[email protected]>
>>> 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
>>>> [email protected], http://forums.thefoundry.co.uk/
>>>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Nuke-python mailing [email protected], 
>>> http://forums.thefoundry.co.uk/http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>>>
>>>
>>>
>>> --
>>> Fabian Fischer
>>>
>>> Compositing  & VFX | [email protected] | +49  170  15 20 750
>>>
>>>
>>> _______________________________________________
>>> Nuke-python mailing list
>>> [email protected], http://forums.thefoundry.co.uk/
>>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>>>
>>>
>> _______________________________________________
>> Nuke-python mailing list
>> [email protected], http://forums.thefoundry.co.uk/
>> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>>
>>
>
> _______________________________________________
> Nuke-python mailing list
> [email protected], http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python
>
>
_______________________________________________
Nuke-python mailing list
[email protected], http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-python

Reply via email to