安装新的Windows系统,我安装了CygWin和64
将Python(2.7.3)放在默认位置(c:\cygwin
和
c:\Python27\python
),并添加了CygWin bin和
Python目录到我的路径(在用户变量PATH中)。从
正常的命令窗口,Python启动完美,但什么时候
我在CygWin环境中从bash
调用它,它挂起,
从不给我输入提示。
我之前已在其他机器上完成此操作,但始终使用 旧版本的Python(32位)和CygWin,以及Python 在一个决定性的非标准位置。有没有其他人这样做过 问题,还是有人能告诉我它可能是什么原因?
答案 0 :(得分:44)
试试这个
python -i
是的,你会在这里找到一些小故障!!!
答案 1 :(得分:33)
问题在于,由于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
命令进行编译。
答案 2 :(得分: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.exe
或console
命令之前附加python
或hg
。为方便起见,我添加了alias hg="console.exe hg"
等别名,所以我可以使用相同的命令,无论我是在Linux shell还是Windows MinTTY bash shell中。
此外,此解决方案似乎适用于python和hg之外的更多本机应用程序。例如,运行mysql
(有或没有-p
)会产生同样的问题(例如“挂起”没有输入提示)。附加console
允许它照常使用。
答案 3 :(得分:2)
根据https://stackoverflow.com/a/9549255/745913,您也可以尝试
/cydrive/c/Python27/python.exe -i foo.py
答案 4 :(得分:1)
用于管理CygWin中不同版本Python的非cygwin位置:
$ /usr/sbin/alternatives.exe
在此处使用--install和--config选项,它与Linux系统上的update-alternatives
相同。
我使用此python -i
方法,并且运行良好。
我还必须首先删除/usr/bin
中的sym-link文件,因为它们与CygWin的python一起安装,而不是最初通过alternatives.exe进行管理。
答案 5 :(得分:1)
另一种通用的解决方法是通过winpty
https://github.com/rprichard/winpty调用它,这实际上并不是特定于python的问题。
答案 6 :(得分:0)
我的解决方案是编写一个shell脚本来运行python应用程序。
python file.py "$@" | tee /dev/null
额外的T恤命令(无处)似乎解决了这个问题。
答案 7 :(得分:-1)
使用cygwin设置重新安装mintty。之后不必使用python -i。