关于 print 不换行

2014 年 7 月 9 日
 hhrmatata
python 2.7

想将两次输出输出到同一行上,就在print 后面加了逗号,例如:

import time

print 'hehe ...',
time.sleep(5)
print 'finish!'

但是有个问题,观察终端中的输出,发现观察到的程序的执行顺序是
1. time.sleep(5)
2. print 'hehe ...',
3. print 'finish!'

如何做到,先输出第一个print,再睡眠,最后输出第二个输出?两个输出在同一行。
6976 次点击
所在节点    Python
14 条回复
cj1324
2014 年 7 月 9 日
直接用import sys; sys.stdout ?
pinepara
2014 年 7 月 9 日
Ansen
2014 年 7 月 9 日
为啥 我这里是按顺序执行的
hhrmatata
2014 年 7 月 9 日
@cj1324
@pinepara
谢谢

最后定义了这样一个函数就好了:

def p(s):
sys.stdout.write(s)
sys.stdout.flush()
return None
pinepara
2014 年 7 月 9 日
cj1324
2014 年 7 月 9 日
@hhrmatata
return None 不就是 return ? 这样写反而更让人疑惑。
wy315700
2014 年 7 月 9 日
终端的输出刷新是按行来的,除非手动调用flush
mengzhuo
2014 年 7 月 9 日
@hhrmatata 不要观察执行顺序,ipdb是你debug的好伙伴
shyrock
2014 年 7 月 9 日
python2.7.6 执行是对的啊。。。
hehe ... finish!
[Finished in 5.1s]
Ever
2014 年 7 月 9 日
不用return就是return None

python3可以print(word, end="")

python2.7可以from __future__ import print_function后照python3的做
Cynic222
2014 年 7 月 9 日
@cj1324
不写return不就是return None?这样写反而更让人疑惑。-- 开个玩笑
cakegg
2014 年 7 月 9 日
import sys
import time
print "hello",
stdout_temp = sys.stdout
time.sleep(5)
sys.stdout = stdout_temp
print "finish"

其实像上面这样写就可以了...
hhrmatata
2014 年 7 月 10 日
@cj1324
@Cynic222
个人习惯问题,方便阅读。明确告诉阅读代码的人是返回空而不是忘记写了。
ggarlic
2014 年 7 月 11 日
这,,,,完全不用改代码啊
python -u xx.py
让python运行在unbuffered的模式不就行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/121777

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX