艰苦学习Python(第三版)练习11输入后才打印语句

艰苦学习Python(第三版)练习11输入后才打印语句,python,printing,cygwin,raw-input,Python,Printing,Cygwin,Raw Input,《艰苦学习Python》(第三版)规定,如果使用MS Windows,则应使用Powershell 我下载cygwin是为了模拟linux环境,Zed Shaw说linux是可以接受的 前10次演习顺利进行 不幸的是,我在练习11“提问”中遇到了一个问题 额外$ex11.py print "How old are you?", age = raw_input() print "How tall are you?", height = raw_input() print "How much do

《艰苦学习Python》(第三版)规定,如果使用MS Windows,则应使用Powershell

我下载cygwin是为了模拟linux环境,Zed Shaw说linux是可以接受的

前10次演习顺利进行

不幸的是,我在练习11“提问”中遇到了一个问题

额外$ex11.py

print "How old are you?",
age = raw_input()
print "How tall are you?",
height = raw_input()
print "How much do you weigh?",
weight = raw_input()

print "So, you're %r old, %r tall and %r heavy." % (age, height, weight)
运行
.py
文件会导致仅在提供三行输入后才打印打印语句吗

$python ex11.py

32
6'2"
180 lbs

How old are you? How tall are you? How much do you weigh? So, you're '32' old, '6\'2"' tall and '180 lbs' heavy.
好奇

有人能提供一个解释和解决方案吗

谢谢


-Python新手

我发现了这篇描述类似症状的堆栈溢出帖子。。。

其中的原因被称为缓冲问题

其中推荐的解决方案声明使用-u选项运行python

检查python帮助页面:

$python-h

-u:无缓冲二进制标准输出和标准输出;另外,PYTHONUNBUFFERED=x 有关'-u'的内部缓冲的详细信息,请参见手册页

事实证明,这似乎也解决了我的问题——至少在短期内

~~~~~~~~~~~~~~~~~

$python-u ex11.py

你多大了?三十二

你有多高?6'2“

你体重多少?180磅

所以,你已经32岁了,6英尺2英寸高,180英尺重

~~~~~~~~~~~~~~~~~

不幸的是,。。如果我想运行一个.py文件,我必须使用-u选项。缓冲区并不是永久清除的(

几秒钟后的另一次尝试导致了相同的初始问题

$python ex11.py

32
6'2"
180 lbs

How old are you? How tall are you? How much do you weigh? So, you're '32' old, '6\'2"' tall and '180 lbs' heavy.
三十二

6'2“

180

你多大了?你有多高?你有多重?那么,你32岁,6英尺2英寸高,180英寸重

~~~~~~~~~~~~~~~~~


是否有长期修复方法?

在每个Cygwin(
bash
)会话开始时,运行:

export PYTHONUNBUFFERED=1
或者,对于持久解决方案,将该行添加到
~/.bashrc
文件中;例如:

echo 'export PYTHONUNBUFFERED=1' >> ~/.bashrc
这使您不必每次都将
-u
传递给
python
可执行文件,因此可以直接调用
*.py
文件

定义值为
1
的环境变量
pythonunburged
和命令行选项
-u
都具有以下效果,正如您所发现的,这可以解决您的问题(从以下方面):

强制stdin、stdout和stderr完全无缓冲。在重要的系统上,也将stdin、stdout和stderr置于二进制模式

请注意,file.readlines()和file对象(用于sys.stdin中的行)中有内部缓冲,不受此选项的影响。要解决此问题,您需要在while 1:循环中使用file.readline()


注意:这仅仅是因为您的特殊设置才有必要的:将Cygwin与Windows
python
可执行文件相结合(我猜)


相比之下,从常规命令提示符(
cmd.exe
)或PowerShell控制台(
PowerShell.exe
)运行Windows
python
)不会出现此问题。

您确定打印语句末尾有逗号吗?您的代码对我来说工作正常,因此Python端没有问题。powershell一定有问题。为什么不将您的问题作为参数传递给
原始输入
?(这就是应该使用的方式。)例如,
age=raw\u input(“你多大了?”)
抱歉,意识到它们是用来阻止新行的。如果你执行代码并等待~10秒,是否会出现任何问题?只是为了明确说明:PowerShell没有被使用,问题发生在Cygwin中。练习12本质上类似~py age=raw\u input(“你多大了?”)身高=原始输入(“你有多高?”)体重=原始输入(“你有多重?”)打印“那么,你有%r岁、%r高、%r重”。%(年龄、身高、体重)~~~~~~~~~~~~~~~~~结果与ex11.py~~~~~~~~~~~~~~~~~~~~~~相同,即python-u选项需要特定,才能按预期运行。