Windows 10创建者更新中的python符号链接

时间:2017-06-05 21:02:35

标签: python windows symlink

自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,所以我不知道这是否有效,但它似乎是一个相当的令人讨厌的箍跳过,即使它确实......我感谢您提供的任何帮助

2 个答案:

答案 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

相关问题