我最近在 Windows 上使用 Cygwin。我想使用 Windows 安装的 Python,所以在测试过程中我使用/cygdrive/c/Python26/python.exe myfile.py
而不是python myfile.exe
.
除了打印之外,这几乎可以完美地工作。当我从 Cygwin 运行 Windows Python 时,在执行完成之前不会打印输出。它可以在 Windows Python 中从 explorer.exe 或 cmd.exe 正常运行,并且可以使用 Cygwin 安装的 Python 在 Cygwin 中运行(/bin/python.exe
).
有解决方法吗?重要的是能够运行 Windows 版本,但我想通过 Bash 来完成这一切。
真正的问题是,当您在任何 Cygwin 终端程序(如 mintty)中运行命令时,它们并不充当 Windows 控制台。只有基于 Windows 控制台的程序(例如 CMD 或 Console2)才能执行此操作。因此,对于 Cygwin 终端,Windows python.exe 并不认为它正在与交互式控制台对话。
这会导致缓冲输出,而不是像交互式会话中那样在每一行上刷新缓冲区。这就是为什么Amro 在每一行添加flush() 可以修复症状,但意味着更改代码。
一种无需更改代码的解决方案是使用命令行上的“-u”标志或设置 PYTHONUNBUFFERED 环境变量来关闭 Python 中的缓冲。
export PYTHONUNBUFFERED=1
/cydrive/c/Python27/python.exe foo.py
or
/cydrive/c/Python27/python.exe -u foo.py
或以交互模式运行
/cydrive/c/Python27/python.exe -i foo.py
您也将无法在 Cygwin 终端中运行 Windows python.exe 交互模式。它不会启动交互式会话,而只会挂起。我发现最好的解决方案似乎是使用“cygstart”(比使用“-i”选项更好):
cygstart /cygdrive/c/Python27/python.exe
这似乎也适用于 ipython (如果已安装):
cygstart /cygdrive/c/Python27/Scripts/ipython.exe
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)