在打印行之间交互的模字符串添加



Im打印两行,这两行都使用\r和%来替换各自打印行中的%d或%s。问题是它们会互相交叉。

def pinging():
average_list = []
max_list = []
host_list = host_string(ptype)
numberitems = len(host_list)
counter = 0
for i in range(0,len(host_list)):
counter += 1
print('Pinged:%d' % i,"of",numberitems, end='r')
try:
ping = subprocess.check_output(['ping','-c',num_pings,host_list[i]],timeout=sec_timeout)
except subprocess.TimeoutExpired:
print('Timeout:%s' % host_list[i], end="r")
continue
ping = str(ping)
ravg,rmax = string_configure(ping,host_list[i],num_pings)
average_list.append(ravg)
max_list.append(rmax)
return(average_list,max_list)

我期待两个单独的更新打印行:1 of 25#等一Timeout: 12.34.56.78#等

相反,我得到:0 of 25

CCD_ 4#继续这样代替";数字项目";具有从"0"改变的ip地址;host_list";

那么,我该如何阻止这两条打印线相互作用呢?

您的问题是r只会将光标移回行首,但不会擦除它,因此下一次打印只会写在已写的内容之上,但不会删除下一个字符,因此您将得到两行的混合。

"33[F"是一个特殊的序列,用于在控制台中将光标移动到上面的行。

因此,在两个print之后,您可以添加

print("33[F33[F", end="")

这将使光标向上移动两行,这意味着这两行将一起显示,而不会有一行与另一行交叉。

如果您希望这样做,还应该删除print中的end="r"

最新更新