在不改变文件的情况下转换/映射Linux引用路径?

0 投票
4 回答
3401 浏览
提问于 2025-04-16 11:09

我现在在做一个项目,客户需要参考文件的路径保持在Linux格式。比如说:

A.ma , referencing objects from --> //linux/project/scene/B.ma
B.ma , referencing objects from --> //linux/project/scene/C.ma

不过我们这里大多数的Maya许可证都是在Windows上。我可以运行一个Python脚本,把所有的路径转换成Windows格式,然后保存文件。比如说:

Z:\project\scene\B.ma

但是我在想办法做到改变或修改原始文件……我来解释一下我想做的事情。

  • 运行脚本来打开文件。
  • 脚本检查是否有Linux格式的参考路径,以及所有子路径。
  • 把所有路径映射到相应的Windows格式路径。
  • 让动画师能够正常“保存”文件,而不需要运行一个单独的保存脚本。

用Python脚本实现这个可能吗?还是说我需要一个完全编译好的插件才能做到这一点?

任何建议都非常感谢。


补充说明:谢谢你的意见。

再多说一点。这个项目是由一个远程公司为我们设置的,要求之一就是我们必须保持路径不变。它们是绝对路径,我们对此没有选择。

我们在Fedora工作站上匹配//linux/的挂载。那个驱动器在我们的Windows工作站上映射为Z:\。不过我们只有两个Linux的Maya许可证,这就是我想这样做的原因。

4 个回答

0

很多Windows应用程序会把开头有两个斜杠“//”的路径当作UNC路径来处理。我不确定Maya是不是这样,但你可以试试看。如果Maya能识别像“//servername/share/foo”这样的路径,那你只需要设置一个叫“linux”的SMB服务器,这样路径就可以正常使用了。我猜你的客户可能就是这么做的,因为在只有Linux的环境下,“//linux”这个路径是没有意义的。

0

你可以使用环境变量来实现这个功能。Maya会在文件路径中自动识别环境变量,你可以通过Maya.env文件为每个平台正确设置这些变量。

1

这里有一个解决方案。第一步是创建一个 dict,用来记录 Linux 和 Windows 的引用(别忘了导入 re 模块来使用正则表达式):

>>> def windows_path(path):
    return path.replace('//linux', 'Z:').replace('/', '\\')

>>> reg = re.compile('(\w+\.ma) , referencing objects from --> (.*)')
>>> d = {}
>>> for line in open('D:\\temp\\Toto.txt'):
    match = reg.match(line)
    if match:
        file_name = match.groups()[0]
        linux_path = match.groups()[1]
        d[file_name] = (linux_path, windows_path(linux_path))


>>> d
{'B.ma': ('//linux/project/scene/C.ma', 'Z:\\project\\scene\\C.ma'),
 'A.ma': ('//linux/project/scene/B.ma', 'Z:\\project\\scene\\B.ma')}

然后你只需要循环这个 dict,来询问文件保存的操作:

>>> for file_name in d.keys():
    s = raw_input('do you want to save file %s ? ' % file_name)
    if s.lower() in ('y', 'yes'):
        # TODO: save your file thanks to d[file][0] for linux path, 
        # d[file][1] for windows path
        print '-> file %s was saved' % file_name
    else:
        print '-> file %s was not saved' % file_name


do you want to save file B.ma ? n
-> file B.ma was not saved
do you want to save file A.ma ? yes
-> file A.ma was saved

撰写回答