在不改变文件的情况下转换/映射Linux引用路径?
我现在在做一个项目,客户需要参考文件的路径保持在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