Форум сайта python.su
0
Всем привет.
Я только начал изучать Пайтон и поэтому у меня постоянно возникают вопросы на которые не всегда можно найти ответ в сети и вообще можно незнать что ты чегото незнаешь. Несмотря на мои первые шаги, на работе уже понадобился небольшой скрипт для автоматизации рутинного процеса. Надеюсь что найду здесь помощь, советы и главное обьяснения логики Пайтона так как мне важно понимать, а не только иметь.
Часть кода я уже написал и выложу его для критики завтра когда буду на рабочем месте, но начно с общей картины.
В программе композитинга (Nuke, Natron) tсть множество узлов (Нод) чтения и записи в которых прописанны пути к файлам которые надо читать и сответственно писать. Нужно написать скрипт который будет изменять эти пути плюс имя и путь рабочего файла. Я как раз написал ту часть кода которая изменяет пути.
Осталось дело за малым:
1. как переписать каждую нужную ноду.
2. как записать рабочий файл с нужным именем в нужное место
3. Нужно создать менюшку в которой будут скрипты в виде списка.
Все вопросы косаются работы самой программы в которую интегрирован Пайтон. Я нашёл руководство программы https://www.thefoundry.co.uk/products/nuke/developers/63/pythondevguide/index.html
но пока это помогло не сильно. Решил обратится за помощью. (мой английский не так хорошь)
Вобщем, буду потихоньку разбераться сам и писать тут результаты моих изысканий. Если у кого будет желание и возможность помочь то я буду только рад )
Зарание спасибо.
Офлайн
0
flink="T:/3.13 Projektdaten 2018/Messen 2018-1/Synflex/02_Design/02_3D/Output/Synflex/10/Sinflex_10_Cam_0010000.exr" print "Old Link: "+ flink #изменение версии папки kar=flink.rpartition("/") kar0=kar[0] vers=kar0[-2::1] vers=int(vers) nvers=vers+1 if nvers<10: nvers="0"+str(nvers) nvers=str(nvers) nlink=kar0[0:-2]+nvers+kar[1]+kar[2] #изменение версии файла kar=nlink.rpartition("_Cam") kar0=kar[0] nlink=kar0[0:-2]+nvers+kar[1]+kar[2] print "New Link: " + nlink
Отредактировано Ivan_Pomidoroff (Окт. 18, 2017 11:54:09)
Офлайн
0
Продолжаем.
Вот нашёл скрипт для Нюка который изменяет линки:
toolbar=nuke.menu('Nodes') menu=toolbar.addMenu('Costum Tools') menu.addCommand('Re-Read All', lambda:reRead()) def reRead(): if len(nuke.allNodes('Read')): p=nuke.Panel('Re-Read All') p.addSingleLineInput('Old Source:', 'Ex.: c:/user/filedir1/') p.addSingleLineInput('New Source:', 'Ex.: c:/user/filedir2/') p.show() oldSource=p.value('Old Source:') newSource=p.value('New Source:') for node in nuke.allNodes('Read'): s1=node['file'].value() node['file'].setValue(s1.replace(oldSource,newSource)) else: nuke.message("No Read nodes found")
Отредактировано Ivan_Pomidoroff (Окт. 19, 2017 15:22:23)
Офлайн
0
Не совсем разобрался но получилось заменить часть на мой код. вот что получилось:
toolbar=nuke.menu('Nodes') menu=toolbar.addMenu('Costum Tools') menu.addCommand('Re-Read All', lambda:reRead()) def reRead(): if len(nuke.allNodes('Read')): for node in nuke.allNodes('Read'): flink=node['file'].value() print "Alt Link: "+ flink #изменение версии папки kar=flink.rpartition("/") kar0=kar[0] vers=int(kar0[-2:]) nvers=vers+1 if nvers<10: nvers="0"+str(nvers) nvers=str(nvers) nlink=kar0[0:-2]+nvers+kar[1]+kar[2] #изменение версии файла kar=nlink.rpartition("_Cam") kar0=kar[0] nlink=kar0[0:-2]+nvers+kar[1]+kar[2] print "New Link: " + nlink node['file'].setValue(nlink) else: nuke.message("No Read nodes found")
Офлайн
0
Кароче додел. Есть ли тут недочёты?
Стандартный линк на файл выглядит так:
“—/Synflex/02_Design/02_3D/Output/Synflex/10/Sinflex_10_Cam_0010000.exr”
# Re-Link nuke.menu( 'Nuke' ).addCommand( 'MyMenu/Re-Link', lambda:relink()) def relink(): if len(nuke.allNodes('Read')): for node in nuke.allNodes('Read'): readlink=node['file'].value() #изменение версии папки kar=readlink.rpartition("/") pkar0=kar[0] vers=int(pkar0[-2:]) nvers=vers+1 if nvers<10: nvers="0"+str(nvers) nvers=str(nvers) newreadlink=pkar0[0:-2]+nvers+kar[1]+kar[2] #изменение версии файла kar=newreadlink.rpartition("_Cam") fkar0=kar[0] newreadlink=fkar0[0:-2]+nvers+kar[1]+kar[2] node['file'].setValue(newreadlink) else: nuke.message("No Read nodes found") if len(nuke.allNodes('Write')): for node in nuke.allNodes('Write'): writelink=node['file'].value() #изменение версии папки kar=writelink.rpartition("/Comp") pkar0=kar[0] vers=int(pkar0[-2:]) nvers=vers+1 if nvers<10: nvers="0"+str(nvers) nvers=str(nvers) newwritelink=pkar0[0:-2]+nvers+kar[1]+kar[2] #изменение версии файла kar=newwritelink.rpartition("_Cam") fkar0=kar[0] newwritelink=fkar0[0:-2]+nvers+kar[1]+kar[2] node['file'].setValue(newwritelink) else: nuke.message("No Write nodes found") savelink=newreadlink.rpartition("_Cam") savelink=savelink[0] nuke.scriptSaveAs(savelink + ".nknc")
Офлайн
253
У вас монолог получается :)
По поводу замечаний.
Офлайн
0
Спасибо за замечания.
1. Скрипт работает коректно поэтому меня сейчас интересует общие замечаня.
2. С переменными у меня не красиво вышло ) Может их называть более длинно и однозначно, а то я сам иногда забываю что там в них лежит.
3. Понятно. Кажется, в моём случае len проверяет наличие нод “реад” Если их нет то пропускаем. (nuke.allNodes('Read') - типо, выбрать все ноды “реад”. Что удевительно он выберает их по очереди пока все не переберёт… это как-то не явно.
4. Версия питона 2.7 (я указал во втором сообщении)
Если найдутся ещё замечания то я буду только рад.
Офлайн