<p>正如其他人所指出的,这里的部分问题是您正在从Cygwin调用Windows Python。这是一件很奇怪的事情,当你碰到这种奇怪的行为,但它可以小心地工作。</p>
<p>当您从Cygwin调用Python(Cygwin Python和Windows Python都是这样)时,您传递的路径将与Python处理的路径一样。这意味着Python必须知道如何处理这种路径。例如,如果通过以下操作:</p>
<ul>
<li><p><code>C:\path\to\script.py</code>-Windows Python知道如何处理这个问题,而Cygwin Python可能会感到困惑。也就是说,如果将其键入Cygwin shell,则这些反斜杠很可能被解释为转义字符,而它们是否是转义字符取决于一些相对复杂的规则。如果你在Cygwin玩的话,就避免。</p></li>
<li><p><code>'C:\path\to\script.py'</code>-这些引号将被Cygwin的bash shell去掉,同时停止将反斜杠作为转义字符,因此这对于从Cygwin调用Windows Python很好。不过,从Windows命令行或类似命令行运行会导致问题,因为Windows不处理单引号。</p></li>
<li><p><code>/cygdrive/c/path/to/script.py</code>-这是从任何Cygwin程序(如Cygwin Python)的角度来看的路径。它对Cygwin-Python非常有效,但对Windows-Python则完全无效。</p></li>
<li><p><code>C:/path/to/script.py</code>-这不是很清楚,但是Windows路径中的反斜杠可以用正斜杠替换,任何表现良好的Windows程序都应该处理得很好:Windows明确允许它们。特别是,Windows Python对它们没有任何问题,Cygwin的bash shell也不会试图巧妙地使用正斜杠。因此,可以在调用Windows Python的任何地方使用这种路径。</p></li>
<li><p><code>$(cygpath -w /cygdrive/c/path/to/script.py)</code>-<code>cygpath</code>是一个Cygwin实用程序,用于在不同的路径样式之间进行转换;通过<code>-w</code>选项调用,它将Cygwin路径转换为Windows路径。<code>$(...)</code>表示Cygwin的bash shell应该用运行该命令的结果替换文本,因此如果这是作为从Cygwin bashshell调用的Windows Python的参数给定的,Windows Python将收到它可以使用的Windows路径。</p></li>
<li><p><code>path/to/script.py</code>-这是一个相对路径,因此需要从适当的目录调用它。它是第一个同时适用于Cygwin和Windows Python的版本,并从Cygwin shell和Windows命令行调用。</p></li>
</ul>
<p>如您所见,路径是复杂的,特别是当您同时使用Cygwin和Windows工具时。</p>
<p>一般来说,如果可能的话,最安全的做法是坚持使用其中一个(因此,只能从Cygwin shell使用Cygwin Python,并且只能从Windows命令行使用Windows Python)。如果这不可能,那么下一个最好的方法是在从Cygwin调用Windows程序时使用<code>cygpath</code>,或者使用其他方法-运行<code>cygpath -w /cygdrive/c/Windows</code>将得到<code>c:\windows</code>;运行<code>cygpath 'c:\Windows'</code>将打印<code>/cygdrive/c/Windows</code>。</p>