代码之家  ›  专栏  ›  技术社区  ›  Steve Folly

Mingw+python热切地翻译路径

  •  4
  • Steve Folly  · 技术社区  · 16 年前

    我正在使用:

    我有一个看起来像绝对路径的环境变量( /path/to/dir )但我用它来构建一个Git URL。在某种程度上,它被翻译成 C:/Program Files/Git/path/to/dir . 好像是python的错:

    在Git-Bash外壳中:

    $ export VAR=/path/to/dir
    $ echo $VAR
    /path/to/dir
    $ python
    >>> import os
    >>> os.environ['VAR']
    'C:/Program Files/Git/path/to/dir'
    

    GitBash没有转换路径,但python是?

    在Windows命令提示符中,python正确地执行了以下操作:

    C:\>set VAR=/path/to/dir
    C:\>echo %VAR%
    /path/to/dir
    
    C:\>python
    >>> import os
    >>> os.environ['VAR']
    '/path/to/dir'
    

    有人能解释一下这是怎么回事吗?我怎样才能阻止bash shell中的翻译呢?

    编辑:我应该补充一点,我的python脚本运行在OSX和Windows上,所以如果有人有解决方案,那么在这两个平台上都工作就更好了。

    3 回复  |  直到 15 年前
        1
  •  1
  •   slurdge    16 年前

    我猜这不是Python的错,而是Git-Bash外壳。
    当你看到变量的时候,也许Git-Bash shell在骗你。
    或者,尽量不要放第一个/以后再添加(如果没有翻译)。

    如果我尝试Cygwin,它会起作用:

    $ export test="/bin"
    $ python
    >>> import os
    >>> os.environ["test"]
    '/bin'
    
        2
  •  2
  •   Paul Whittaker    15 年前

    这个问题听起来肯定是由MSY引起的。当一个msys进程执行一个非msys进程(例如,您的msysgit bash shell调用本机Windows python)时,将检查参数是否有任何类似于绝对posix路径的内容(例如,以单个“/”开头的内容),并将这些内容转换为底层的“real”Windows路径,以便非msys程序可以找到它们。出于同样的原因,同样的过程也可能发生在环境变量的内容上。

    这就是为什么删除前导的“/”工作(该值不再像posix路径),为什么添加额外的工作(同上),以及为什么在cygwin下工作良好(它不是msys)。我还猜测您在“c:\program files\git”上安装了msys git,这就是为什么msys认为它的“假”posix文件层次结构基于此,并将其添加到“/path/to/dir”的前面。

    不幸的是,如果这是解释,那么就没有一个明确的解决方案。我遇到了一个类似的问题,试图通过ssh传递远程路径,但我自己没有找到任何好的方法来解决这个问题,根据上的讨论 http://comments.gmane.org/gmane.comp.gnu.mingw.msys/4511 (从2008年起)除了解决方法,目前还没有明显的解决方法。如果这对你来说变成了一个更大的问题,你可能想在MingWmsys的邮件列表或bug追踪器上提出它。根据GMane的讨论,尽管这是一个已知的问题,但从未正式报告过。

        3
  •  1
  •   KurzedMetal    16 年前

    从msysgit获得的控制台可能是为git用户的需要而修改的,从我的pov中,它只对简单的任务和访问git命令行有用,而不是开发和运行python脚本(在为特定应用程序安装的shell中,您使用的是针对Windows的python安装,听起来不太好)。

    你应该安装 Cygwin 以及他的python包(如果您愿意,甚至是git包),以获得一个正确的POSIX环境,并为其准备二进制文件和库。

    推荐文章