TypeError,在 Maya 中使用 Python 创建目录

TypeError, making directory with Python in Maya

我正在尝试在 Maya 中使用 Python 创建一个文件夹来保存文件。但是,我收到一个错误,我不确定如何解决。 (在编写脚本方面还不是很有经验)

这是创建目录字符串的代码: (Maya 正确打印出 DIRECTORY)

# Creates a directory to save the .json file to
USERAPPDIR = cmds.internalVar(userAppDir = True)
DIRECTORY = os.path.join(USERAPPDIR, "gradingManager")
print('Maya application directory: ', DIRECTORY)

创建目录的功能在Maya中用一个按钮控制:

    ##########################
    # Safe data in json file #
    ##########################
    cmds.text(label = "")
    cmds.text(label = " Save all results to a .json file for record keeping.",
              font = "boldLabelFont")
    cmds.button(label = "Save to .json file", command = self.save, width = 600)

实际函数:

def save(self, directory=DIRECTORY, *args):
    ######################################################################
    ## This method saves the information gathered above in a .json file ##
    ######################################################################

    # creates a directory
    self.createDir(directory)

    print("saving things")

def createDir(self, directory=DIRECTORY):
    ###################################################################
    ## This function creates a directory for the save functionality. ##
    ###################################################################

    if not os.path.exists(directory):
        os.mkdir(directory)

它所指的错误和功能:

# Error: TypeError: file C:\Program Files\Autodesk\Maya2020\bin\python27.zip\genericpath.py line 26: coercing to Unicode: need string or buffer, bool found #

# Does a path exist?
# This is false for dangling symbolic links on systems that support them.
def exists(path):
    """Test whether a path exists.  Returns False for broken symbolic links"""
    try:
        os.stat(path)
    except os.error:
        return False
    return True

我希望这些信息足够了。 我尽可能保持功能干净,所以很明显问题来自检查新目录的路径是否已经存在。 如果您需要更多信息,我很乐意提供。

当您按下按钮时,您期望它会 运行 save(some_path)save() 具有默认值 DIRECTORY 但它不会这样工作。

按钮使用 Maya 作者预定义的一些值执行功能。我不知道在 Maya 中将按钮发送到 save() 的值是什么,但在其他 GUI 中通常它会发送事件信息 - 即。单击了什么小部件,使用了什么鼠标按钮,鼠标位置是什么,等等

所以按钮似乎执行 save(True) 甚至 save(True, other values) 并且这将 True 分配给 def save(self, dictionary, ...) 中的字典,稍后它 运行s createDir(True) and exists(True)` 并且您收到错误消息。

您应该直接在函数内部使用 DIRECTORY

def save(self, *args):

    directory = DIRECTORY

    # creates a directory
    self.createDir(directory)

    print("saving things")

如果您有一些小部件来选择目录或手动编写目录,那么您还必须在函数中使用它

def save(self, *args):

    directory = some_widget_to_select_folder.get_selected_folder()
   
    if not directory:
        directory = DIRECTORY

    # creates a directory
    self.createDir(directory)

    print("saving things")