Windows Python 的 Cygwin 路径
我有一台装了简单版Cygwin的机器,还有Windows版本的Python。我需要在上面运行一些Python脚本,但Python需要用Windows的路径格式。我可以用cygpath -w
这个命令把我提供的参数转换成Windows路径,不过后面还有很多其他脚本里面包含了Unix/Cygwin的路径,这些脚本会被后续调用。
有没有办法让Windows版的Python接受Unix/Cygwin的路径呢?
2 个回答
不,Windows上的Python不支持Cygwin路径,但Cygwin有自己的Python。如果你不能把它添加到现有的Cygwin安装中,你可以考虑在一个你有写入权限的目录里,进行一个用户特定的Cygwin安装。
虽然我怀疑这对你来说也不是一个选择,但确实有一种方法可以让Windows程序有限地支持Cygwin路径:把Cygwin安装到C:\
,这样Cygwin的/path
就等于C:\path
。这个方法依赖于Windows的API(虽然不是所有Windows程序)可以接受反斜杠和斜杠作为路径分隔符,并且它会把没有驱动器字母的绝对路径视为指向系统驱动器(也就是C:
)。
显然,这种方法对指向其他驱动器的Cygwin路径(通过Cygwin挂载表)是行不通的。对于任何使用/
(而不是-
)来引入选项的程序,这种方法也不适用,这包括大多数内置的Windows命令行工具。不过,通常对于像Python这样的跨平台工具是有效的。
还有一个选择是使用MSYS,而不是Cygwin。MSYS是Cygwin的一个旧版本的分支,它最显著的特点是当调用Windows程序时,会自动将POSIX路径转换为Windows路径。不过要注意,这种方法也有其缺陷,因为有时候不太清楚一个参数是否是路径。因此,有时它会无法正确转换路径,或者错误地改变一个不是路径的参数。
创建一个名为 wpython
的文件,并把它保存在一个地方,比如 /bin
目录下:
#!/bin/bash
path=$1
shift # Remove filepath from other args to pass them further
python.exe $(cygpath -w $path) $@ # Call python.exe with Windows path and passed args
然后可以这样使用它:
#!/usr/bin/env wpython
print(123)
别忘了要让这两个文件都可以执行,方法是: chmod +x filename
附注:这个解决方案基于 这篇博客文章。