import os
import time
h = 0
s = 0
m = 0
while s <= 60:
os.system('clear')
print h, "hours", m, 'minutes', s, 'seconds'
time.sleep(1)
s += 1
if s == 60:
m += 1
s = 0
elif m == 60:
h += 1
m = 0
s = 0
我上面有这个代码。这一切都很好,并做了它的意图,但我想做它,以便它打印在同一行中的所有语句。例如,它应该打印出0小时0分0秒,然后在同一行打印出0小时0分1秒,第二个变量是唯一正在改变的东西。我该怎么做呢?我已经尝试过使用os.system('clear')命令,但它不起作用。我在Mac OSX 10.7上运行它。
答案 0 :(得分:3)
您应该使用终端提供的内容。在大多数情况下,您需要使用'\r'
(回车,返回该行的第一列);但是根据操作系统的不同,可能会对其进行解释,使其也附加换行符。我觉得我记得OSX可能会这样做。
此外,您还需要避免自动换行符print
始终追加。您可以使用尾随逗号,但这有问题(杂散空间,没有刷新)。所以我建议改为使用sys.stdout.write()
,因为如果没有新行通常不会进行刷新,您也应该明确使用sys.stdout.flush()
。
然后,返回第一列将不会删除旧输出,因此它只会被下一行覆盖。如果它比之前的那个短,你将有尾随垃圾。为避免这种情况,请再次使用终端提供的内容(通常'\x1b[K'
将所有内容擦除到行尾但不移动光标,但如果这对您不起作用,只需打印一些空格或确保输出为始终格式化为相同的宽度。)
EL = '\x1b[K' # clear to end of line
CR = '\r' # carriage return
sys.stdout.write(("%d hours %d minutes %s seconds" + EL + CR) % (h, m, s))
sys.stdout.flush()
更合适的方法(除了使用文字序列的快捷方式)是使用官方的 curses 库。
import curses
curses.setupterm()
EL = curses.tigetstr('el')
CR = curses.tigetstr('cr')
如果CR真的不能像我们想要的那样在OSX上运行,那么你的termcaps中可能会有 goto 去特定的位置(例如第一列),或者你可以使用{{ 1}}(SC)和save_cursor
(RC)恢复先前保存的位置:
restore_cursor
答案 1 :(得分:2)
试试这个:
print h, "hours", m, 'minutes', s, 'seconds', '\r'
你也应该看看Alfe的回答: - )
答案 2 :(得分:0)
在Python 3中,您可以使用这种代码:
Then(/^can assign multitimes$/) do
assignee = $driver.find_element(:xpath, '//*
[@id="left"]/div/div[1]/div[3]/div[5]/div[2]')
if assignee.text().include? ','
puts "Failed (request cannot be assigned to otherusers)"
else
puts "Passed (request cannot be assigned to otherusers)"
end
end