自Windows 10创建者更新以来,您可以在创建符号链接时启用开发人员模式以规避管理员权限。现在,我能够使用 mklink 创建一个符号链接,如下所示:
os.system('mklink %s %s' %(dst, src))
希望很明显 dst 是目标符号链接路径, src 是符号链接的源文件。虽然它似乎工作正常,但如果失败则不会出现错误,这使得确保每个符号链接成功更加困难。我可以检查每个符号链接后路径是否存在,但效率低于try / except子句。还有一个看起来像命令外壳窗口(?)的东西,它每次都会快速弹出和关闭 - 当你对许多文件进行符号化时,这真的很烦人......
所以,我一直在尝试我在堆栈溢出时发现的其他选项,如下所示:How to create symlinks in windows using Python?不幸的是, CreateSymbolicLinkW 命令似乎没有为我工作...我也发现:OS.symlink support in windows你需要调整组策略编辑器;但是,显然仍然需要管理员组中的用户以管理员身份运行该过程,即使您使用符号链接权限明确设置该用户。
通过Windows 10创建者更新,您可以在 CreateSymbolicLink api( SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE )中提及新的 dwflag 请参阅此处的参考资料:symlinks windows 10
使用ctypes的东西有点过头了,所以我想知道是否有人知道:我能否真正使用新的dwflag?我该如何使用它?如果不以管理员身份运行流程,它会工作吗?
我使用的是Autodesk Maya,因此我坚持使用python 2.7选项...我没有尝试以管理员身份启动Maya,所以我不知道这是否有效,但它似乎是一个相当的令人讨厌的箍跳过,即使它确实......我感谢您提供的任何帮助
答案 0 :(得分:2)
如果失败则不会出错
os.system将返回呼叫的退出状态。它不会引发异常。
如果查看os.system的文档,他们建议使用子进程模块。实际上,subprocess.check_call执行您所描述的内容(在非零退出状态上引发异常)。也许这会更好。
另一方面,即使源不存在,命令mklink也将返回零退出状态(它将创建指向不存在的文件的链接并返回0)。您可能希望验证您提到的实际链接,具体取决于您要查找的错误。
至于隐藏控制台窗口,请参阅this。
答案 1 :(得分:0)
src
自Windows上的python 3.8起就可以使用,只要打开Developer Mode。
不确定这是否对Maya有帮助;他们似乎有committed to Python 3。