import select
import sys
inputs=[sys.stdin]
while 1:
readable,w,e=select.select(inputs,[],inputs)
for r in readable:
print 1,
raw_input()
print 2
print 3,
当我在Ubuntu上尝试这个python代码时,假设我在终止中随机输入'asd'。它显示:
asd
1 2
asd
3 1 2
似乎“print blabla”的行为会受到stdin文件描述符状态的影响,但“print blabla”却没有。有人能告诉我那里发生了什么吗?
答案 0 :(得分:0)
打印xxxxxx与打印xxxxxx之间存在差异,
print "Yes"
将在屏幕上打印“是”并添加\ n(换行符)
print "Yes",
将在没有\ n(换行符)
的情况下在屏幕上打印“是”答案 1 :(得分:0)
正如评论中所指出的,您在Python 2.x中看到行缓冲标准输出的效果:,
中的尾随print
将阻止它发出新行。在发出新行之前,不会打印带有,
结尾的文本。您可以使用一些简单的代码删除缓冲:
#!/usr/bin/env python
import sys
class Logger(object):
def __init__(self, stream):
self.stream = stream
def write(self, msg):
self.stream.write(msg)
def flush(self):
pass
if __name__ == '__main__':
sys.stdout = Logger(sys.stdout)
print 'User says hello!',
print 'Goodbye, cruel world!'
如您所见,sys.stdout
被替换为在每次打印后执行flush
的其他流。您还可以查看this thread和this one以获取更多信息。