如何在Python中处理符号链接以进行跨平台执行?

时间:2017-10-27 15:25:34

标签: windows python-2.7 symlink

我正在创建一个Python 2.7脚本来自动化用于Windows和Linux(Ubuntu)系统的环境设置,最好是使用vanilla Python。

我无法让Python在Windows上创建符号链接(我确信它在Linux上更简单),并且根据其他Stack Overflow问题的方法,我还没有能够让这个工作。

我的第一种方法是在一个非常简单的方法中使用os.symlink

def createSymlink(source, dest):
    os.symlink(source,dest)

但这会返回错误: AttributeError: 'module' object has no attribute 'symlink'

经过更多搜索后,我尝试了另一种基于this答案的方法,但我收到了类似的错误。

  File "C:/Workspace/PythonProjects/ciim-architect/main.py", line 94, in createSymlink
    os.symlink = symlink_ms(source, dest)
  File "C:/Workspace/PythonProjects/ciim-architect/main.py", line 86, in symlink_ms
    csl.argtypes = (ctypes.c_wchar_p, ctypes.c_wchar_p, ctypes.c_unit32)
AttributeError: 'module' object has no attribute 'c_unit32'

此方法的代码如下,_OS == 'Windows'为True。

def createSymlink(source, dest):
    if _OS == 'Windows':
        def symlink_ms(source, dest):
            import ctypes
            csl = ctypes.windll.kernel32.CreateSymbolicLinkW
            csl.argtypes = (ctypes.c_wchar_p, ctypes.c_wchar_p, ctypes.c_unit32)
            csl.restype = ctypes.c_ubyte
            flags = 1 if os.path.isdir(source) else 0
            try:
                if csl(dest, source.replace('/', '\\'), flags) == 0:
                    raise ctypes.WinError()
            except:
                pass
        os.symlink = symlink_ms(source, dest)

我对Python很陌生,所以我可能会认为这完全错了,但是有没有办法在不吸引第三方库的情况下实现这一点?

0 个答案:

没有答案