关于 print 不换行

2014-07-09 16:31:17 +08:00
 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,再睡眠,最后输出第二个输出?两个输出在同一行。
5573 次点击
所在节点    Python
14 条回复
cj1324
2014-07-09 16:36:19 +08:00
直接用import sys; sys.stdout ?
pinepara
2014-07-09 16:37:06 +08:00
Ansen
2014-07-09 16:41:37 +08:00
为啥 我这里是按顺序执行的
hhrmatata
2014-07-09 16:41:43 +08:00
@cj1324
@pinepara
谢谢

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

def p(s):
sys.stdout.write(s)
sys.stdout.flush()
return None
pinepara
2014-07-09 16:43:31 +08:00
cj1324
2014-07-09 16:44:15 +08:00
@hhrmatata
return None 不就是 return ? 这样写反而更让人疑惑。
wy315700
2014-07-09 16:46:00 +08:00
终端的输出刷新是按行来的,除非手动调用flush
mengzhuo
2014-07-09 16:46:40 +08:00
@hhrmatata 不要观察执行顺序,ipdb是你debug的好伙伴
shyrock
2014-07-09 16:47:45 +08:00
python2.7.6 执行是对的啊。。。
hehe ... finish!
[Finished in 5.1s]
Ever
2014-07-09 16:49:07 +08:00
不用return就是return None

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

python2.7可以from __future__ import print_function后照python3的做
Cynic222
2014-07-09 16:51:17 +08:00
@cj1324
不写return不就是return None?这样写反而更让人疑惑。-- 开个玩笑
cakegg
2014-07-09 19:38:33 +08:00
import sys
import time
print "hello",
stdout_temp = sys.stdout
time.sleep(5)
sys.stdout = stdout_temp
print "finish"

其实像上面这样写就可以了...
hhrmatata
2014-07-10 07:19:06 +08:00
@cj1324
@Cynic222
个人习惯问题,方便阅读。明确告诉阅读代码的人是返回空而不是忘记写了。
ggarlic
2014-07-11 01:29:58 +08:00
这,,,,完全不用改代码啊
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