2013-02-09 79 views
0

我需要在相同的位置打印“ok”。任何方式来做到这一点?python打印一行相同的空间

我找到了解决方案,但他们没有工作与IDLE正确:

while (count < 9): 
     if statusm == "<Status>OK</Status>": 
     print "ok", 

我想在同一行上每一个“OK”。谢谢!

+5

你是什么意思在同一个地方? – 2013-02-09 16:06:21

+1

需要更多信息来回答这个问题。 “同样的东西”是什么意思,你在哪里打印?一个文件,Windows终端? – Will 2013-02-09 16:07:26

+0

是的Windows终端 该代码打印好吧好吧好吧好吧好吧没有,打印好的新行和其他好吧我只是需要一个没有更多 – 2013-02-09 16:09:14

回答

1

例如,如果你想在完全相同的点打印 “OK”,你可以这样做:

for i in range(0, 10000): 
    print("\rOK", end='') 

结果:

OK 

在相同的控制台点上10000次worte。

+0

似乎无法在Python 2.7 + IPython上工作。我需要改变什么? – rohitkulky 2015-04-16 10:08:31

3

是这样的吗?

代码:

for i in range(5): 
    print '\b\b\bok', 

或者,如果你的 'OK' 是你可以使用一个单一的 '\ r',而不是行的开头:

for i in range(5): 
    print '\rok', 

输出:

ok 
+1

一般而言,'\ r'会回到行首。 – chepner 2013-02-09 16:18:49

+0

http://sms.gerswin.com/okprint.png 不工作 – 2013-02-09 16:19:05

+0

@GerswinLee看起来像Windows终端不喜欢退格字符。你可以尝试使用'\ r',但我怀疑结果是一样的。 – Matt 2013-02-09 16:20:07

0

是什么? :

from sys import stdout 

count = 1  
statusm = "<Status>OK</Status>" 
while (count < 9): 
     if statusm == "<Status>OK</Status>": 
      stdout.write('OK') 
      count += 1 

编辑

我认为这是不可能做到这一个OK,在空闲状态。但是,下面的代码会给出什么是可能在控制台的想法:

from sys import stdout 
from time import sleep 

several = ("<Status>OK</Status>", 
      "<Status>bad</Status>", 
      "<Status>OK</Status>", 
      "<Status>bad</Status>", 
      "<Status>yes</Status>", 
      "<Status>OK</Status>", 
      "<Status>none</Status>", 
      "<Status>bad</Status>", 
      "<Status>OK</Status>", 
      "<Status>yes</Status>") 

good = ('OK','yes') 

for i,status in enumerate(several): 
    y = str(i) 
    stdout.write(y) 
    stdout.write(' OK' if any(x in status for x in good) else ' --') 
    sleep(1.0) 
    stdout.write('\b \b\b \b\b \b') 
    for c in y: stdout.write('\b \b') 

结果

OKOKOKOKOKOKOKOK 
+0

只是一个好,也许是不可能的 – 2013-02-09 16:33:17

0

如果需要打印它们一次一个,可以使用其他的答案之一。 这将一次全部打印出来:

my_var = '' 
while (count < 9): 
     if statusm == "<Status>OK</Status>": 
     my_var += 'ok' 
print my_var