Windows Python 的 Cygwin 路径

3 投票
2 回答
4177 浏览
提问于 2025-04-17 06:02

我有一台装了简单版Cygwin的机器,还有Windows版本的Python。我需要在上面运行一些Python脚本,但Python需要用Windows的路径格式。我可以用cygpath -w这个命令把我提供的参数转换成Windows路径,不过后面还有很多其他脚本里面包含了Unix/Cygwin的路径,这些脚本会被后续调用。

有没有办法让Windows版的Python接受Unix/Cygwin的路径呢?

2 个回答

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路径。不过要注意,这种方法也有其缺陷,因为有时候不太清楚一个参数是否是路径。因此,有时它会无法正确转换路径,或者错误地改变一个不是路径的参数。

1

创建一个名为 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

附注:这个解决方案基于 这篇博客文章

撰写回答