0
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”的行为会受到标准输入文件描述符状态的影响,而“print blabla”则不会。有人可以告诉我那里发生了什么吗?

4

2 回答 2

0

print xxxxxx 和 print xxxxxx 是有区别的,

print "Yes"

将在屏幕上打印 Yes 并添加 \n (换行符)

print "Yes",

将在没有 \n (换行符)的情况下在屏幕上打印“是”

于 2013-10-02T07:08:56.833 回答
0

正如评论中所指出的,您在 Python 2.x 中看到了行缓冲标准输出的效果:a,中的尾随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每次打印后执行的其他流。您还可以查看此线程线程以获取更多信息。

于 2013-10-02T10:41:49.810 回答