我最近一直在Windows上使用Cygwin。我想使用Python的Windows安装,所以在测试期间,我使用的是/cygdrive/c/Python26/python.exe myfile.py
,而不是python myfile.exe
。
这几乎是完美的工作,除了打印。当我从Cygwin运行Windows Python时,直到执行完成,输出才会打印出来。它可以从explorer.exe或cmd.exe在Windows Python中运行,也可以使用Cygwin安装的Python在Cygwin中运行(/bin/python.exe
)。
有办法解决这个问题吗?重要的是能够运行Windows版本,但是我想用Bash来完成这一切。
如果你刷新输出
真正的问题是,当您在任何一个Cygwin终端程序(如mintty)中运行命令时,它们都不能充当Windows控制台。只有像CMD或Console2这样基于Windows控制台的操作系统才能做到这一点。因此,对于Cygwin终端,Windows python.exe不认为它在与交互控制台对话。
这将导致缓冲输出,而不是像在交互会话中那样刷新每一行上的缓冲区。这就是为什么Amro在每一行添加flush()可以修复症状,但意味着要更改代码。
不更改代码的一种解决方案是使用命令行上的'-u'标志或设置PYTHONUNBUFFERED环境变量来关闭Python中的缓冲。
或者
或以交互模式运行
您也将无法在Cygwin终端中运行Windows python.exe交互模式。它不会启动交互式会话,但会挂起。我发现最好的解决方案似乎是使用“cygstart”(比使用“-I”选项更好):
这似乎也适用于ipython(如果安装了):
不回答最初的问题,但是对于那些想从Cygwin终端(例如mintty)中使用Python interactive session的人来说-用“-i”选项启动Python,明确地告诉它需要在交互模式下运行:
简单的方法是在.bashrc中创建一个别名(知道它只在交互式终端会话中读取):
否则,Python将不知道它在控制台中运行,因为所有基于Cygwin pty的终端(mintty、rxvt和xterm)都被Windows识别为管道,而不是控制台。因此,Python认为没有控制台并进入非交互模式。因此,如果仍然需要交互模式,则需要显式地告诉Python使用它。但是,它仍然不能正常工作-仍然不能使用HOME或LEFT箭头键,等等。
相关问题 更多 >
编程相关推荐