在Windows上调用CygWin下的python挂起

Jam*_*nze 36 python cygwin

安装新的Windows系统后,我在其默认位置(c:\cygwinc:\Python27\python)安装了CygWin和64位Python(2.7.3),并将CygWin bin和Python目录添加到我的路径中(在用户变量PATH中).从正常的命令窗口,Python启动完美,但是当我bash在CygWin环境中调用它时,它会挂起,从不给我输入提示.

我以前在其他机器上完成了这个,但总是使用旧版本的Python(32位)和CygWin,以及Python在一个非标准的非标准位置.有没有其他人有这个问题,或者有人可以告诉我它可能是由于什么?

vik*_*cks 47

试试这个

python -i
Run Code Online (Sandbox Code Playgroud)

是的,你会发现一些故障!


Ada*_*eld 39

问题在于,由于Cygwin终端(MinTTY)的行为方式,Python的本机Windows版本没有意识到stdout是一个终端设备 - 它认为它是一个管道,因此它以非交互模式运行交互模式,它完全缓冲其输出而不是行缓冲它.

这是新的原因可能是因为在您之前的Cygwin安装中,您没有MinTTY,并且使用的终端只是标准的Windows终端.

为了解决这个问题,您需要从常规Windows终端(Cmd.exe)运行Python ,或者安装Cygwin版本的Python而不是Python的本机Windows版本.Cygwin版本(可通过Cygwin安装为软件包setup.exe)了解Cygwin终端并在通过MinTTY运行时正常运行.

如果您想要的特定Python版本不能作为Cygwin包使用,那么您也可以下载Python的源代码并在Cygwin下自行构建.如果你还没有一个(GCC),你需要一个Cygwin编译器工具链,但我相信它应该用标准./configure && make && make install命令编译.

  • [这个答案](http://stackoverflow.com/a/9549255/9530)也提供了一些我以前不知道的建议 - 使用`-u`命令行开关运行Python或设置环境变量`PYTHONUNBUFFERED = 1`将改变Python的缓冲行为. (4认同)
  • 谢谢.我不能改变Python的版本(没有安装2个版本,一个用于CygWin,一个用于其他所有版本),因为它是我们生产构建链的一部分.但``python -i`可以工作,在`.bashrc`中创建一个别名可能是一个可以接受的解决方案. (3认同)
  • +1-从Windows Python27切换到Cygwin Python32也解决了我遇到的这个问题。 (2认同)

mar*_*111 11

我在Mercurial(hg)+ OpenSSH,Python和MinTTY方面遇到了类似的问题,但是在MSYS而不是CygWin下.尽管如此,据我所知,这个和我的问题都是由于MinTTY没有处理使用本机Windows控制台功能的应用程序引起的(在Adam的答案中,他详细解释了Python).

对我来说,我遵循https://code.google.com/p/mintty/issues/detail?id=56#c64的评论64中找到的解决方案

使用winpty(https://github.com/rprichard/winpty)项目编译并在我的路径中,我能够从MinTTY shell 运行本机 Python(在交互模式下)和Mercurial,而无需特殊的构建或开关(例如python -i) .所有我需要的是追加console.execonsole在之前pythonhg命令.为方便起见,我添加了别名,alias hg="console.exe hg"所以我可以使用相同的命令,无论我是在Linux shell还是Windows MinTTY bash shell中.

此外,此解决方案似乎适用于python和hg之外的更多本机应用程序.例如,运行mysql(有或没有-p)会产生同样的问题(例如"挂起"没有输入提示).附加console到它允许它像往常一样.

  • 我终于*得到了50个声望点,谢谢你!虽然'-i'在大多数情况下都有效,但我们有实验室软件主要运行cygwin,但后来调用了一个windows python,因为它需要ctypes.WinDLL.这个胜利电话有一个嵌入式的ipython提示,这在薄荷上很糟糕(标签/箭头不起作用,都是傻瓜).这是最简单和最好的解决方案 - 像魅力一样工作.在bash脚本中,只做了"console.exe C:\ Python27\python.exe",现在嵌入ipython工作得很好!拔出头发,导致64位窗户,薄荷只是镇上的终端游戏. (2认同)