Q100497: Katana 에서 데이터 손실을 방지하기 위해 자동 저장 스크립트를 설정하는 방법


요약

Katana 에서 프로젝트를 설정할 때 데이터와 시간 손실을 방지하기 위해 진행 중 저장 기능이 필수적입니다. Katana 에는 자동 저장 기능이 내장되어 있어 일정 시간 또는 작업 후 백업 충돌 파일을 저장합니다.

Crash Saves에 대한 자세한 내용은 Katana 사용자 가이드: 자동 저장을 Katana 하세요.

이 문서에서는 자동 저장 스크립트를 설정하는 방법을 보여줍니다. 이 스크립트는 Katana 의 임시 디렉터리에 자동으로 생성된 파일 이름을 저장하는 대신, 사용자 지정 명명 규칙을 사용하여 사용자 지정 위치에 저장하는 데 사용할 수 있습니다. 이는 자동 저장 기능의 기본 동작입니다.

더 많은 정보

Katana Katana Python API 내의 Katana 파일 모듈을 통해 프로젝트 파일을 저장합니다.

Katana File.Save( path/to/location/file.katana ) 호출하면 선택한 파일 이름을 사용하여 현재 Katana 프로젝트가 선택한 위치에 저장됩니다.

Katana File.CrashSave() 호출하면 현재 Katana 프로젝트의 충돌 파일이 자동 생성된 이름으로 임시 디렉토리에 저장되고, Katana Crash File Selector를 사용하여 복원할 수 있습니다.

자동 저장 파일 복원에 대한 자세한 내용은 다음 문서를 참조하세요. Q100450: 충돌 후 자동 저장된 파일을 찾고 복구하는 방법

위에 설명된 기능을 사용하면 지정된 시간 간격으로 Katana 프로젝트를 자동으로 저장하는 Python 스크립트를 만들 수 있습니다.

Katana 파일 모듈에 대한 자세한 내용은 Katana 개발자 가이드: 프로젝트 작업을 Katana Katana .

예제 스크립트

이 기사에는 Python 예제가 첨부되어 있으며, 필요에 따라 다운로드하여 수정할 수 있습니다.

예제를 다운로드하고 파일을 .katana\UIPlugins 폴더로 옮기세요.

예를 들어:

Windows: C:\Users\USERNAME\.katana\UIPlugins\autosaveProject.py
리눅스: /mnt/nethome/users/USERNAME/.katana/UIPlugins/autosaveProject.py

해당 파일이 UIPlugins 폴더에 추가되면 Katana 시작 시 해당 파일을 로드하고 실행합니다.

스크립트 사용

스크립트에는 saveOption 변수를 설정하여 선택할 수 있는 세 가지 옵션이 있습니다. 또한 저장 간격 옵션도 있는데, 예시 스크립트에서는 현재 60000밀리초(60초)로 설정되어 있습니다.

아래 옵션을 검토하세요.

옵션 0: 강제 자동 저장 충돌 저장

이 옵션을 사용하면 Python을 통해 새로운 CrashSave를 강제로 실행할 수 있습니다.

Katana 에는 내장된 자동 저장 기능이 있지만, 이 기능은 Python으로 함수를 실행하기 전에 설정하는 데 유용할 수 있습니다.

옵션 1: 현재 프로젝트 파일에 저장

이 옵션을 사용하면 현재 프로젝트를 새 저장으로 덮어씁니다.

Katana 프로젝트가 수정된 경우에만 파일을 저장합니다.

옵션 2: 파일을 지정된 위치에 저장합니다.

이 옵션은 옵션 1과 동일하게 작동하지만 디렉토리 위치와 이름을 선택할 수 있습니다.

원하는 저장 위치를 추가하려면 스크립트를 변경해야 합니다.

또한, 시작 시 자동저장 파일을 확인하는 도구를 만들어야 합니다.

from Katana import QtCore, NodegraphAPI, Katana File
import os

# VARIABLES

# Set your save option
saveOption = 2

# Set delay interval for autosaves
# function argument is the interval in milliseconds (60 seconds in this example)
autosaveDelay = 60000

def saveAndSubmit():
''' Autosaves project with option specified by user '''

# Get path variables
projectPath = NodegraphAPI.NodegraphGlobals.GetProjectFile()
projectFile = os.path.basename(projectPath)
projectDir = os.path.dirname(projectPath)

# OPTION 0
# Q100450: Locating a crash autosave file - https://support.foundry.com/hc/en-us/articles/360000024960
# Save a crash file (standard autosave):
if saveOption == 0:
KatanaFile.CrashSave(True)

# Check if file has been saved atleast once.
if projectPath != '':
# Check if file has been modified since last save
if Katana File.IsFileDirty():

# OPTION 1
# to save file at the current location use:
if saveOption == 1:
KatanaFile.Save(projectPath)

print ("File autosaved to: " + projectPath)

# OPTION 2
# to save at a specified location use:
if saveOption == 2:
customNameFile = 1 # If you want to use a different project name change the customNameFile = 0
customprojectFile = projectFile #Overwrites the active save with any changes (only happens if customNameFile is not 0
# Custom folder directory for Option 2
customFolderDirectory = '/home/userName/Downloads/customFolder/'

if customNameFile == 0:
customprojectFile = 'CustomFileName' # If customNameFile is 0 then you can change CustomFileName for whatever name you want the file to be save as

KatanaFile.Save(customFolderDirectory + customprojectFile)
print ("File autosaved to: " + customFolderDirectory + customprojectFile)

timer = QtCore.QTimer()
timer.timeout.connect(saveAndSubmit)
timer.start(autosaveDelay)

스크립트 설명

스크립트는 QtCore.QTimer() 호출을 사용하여 타이머 루프를 제공합니다. QTimer 를 사용하면 백그라운드 함수가 스크립트 함수를 실행하기 전에 일정 시간 동안 대기할 수 있습니다.

지정된 시간( autosaveDelay 변수로 결정)이 경과할 때마다 타이머는 saveAndSubmit() 함수를 실행합니다.

saveAndSubmit() 함수 정의 내에는 saveOption 변수 로 전환할 수 있는 3가지 옵션이 있습니다 .

선택한 옵션에 따라 스크립트는 crashSave로 저장되거나, 현재 Katana 파일을 덮어쓰거나, 새 위치에 저장됩니다.

옵션 1과 2는 먼저 Katana File.IsFileDirty() 라는 다른 함수의 결과를 확인합니다 . 이 함수는 Katana 이전 저장 이후 프로젝트가 수정되었는지 확인하고, 아무것도 수정되지 않은 경우 Katana 의 연속 저장을 중지합니다.

Katana 의 자동 저장 기능에 대한 자세한 내용은 Katana 개발자 가이드를 참조하세요.

첨부 파일

우리는 문제로 불편을 끼쳐 드려 죄송합니다

이유를 알려주세요