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

modulo string additions interacting between print lines

我正在打印 2 行,它们都使用 \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)

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

相反,我得到: 0 of 25

1 of 25.25.109 # 它继续像这样用来自“host_list”

的更改后的 IP 地址替换“numberitems”

那么如何阻止这 2 行打印交互?

你的问题是 \r 只将光标移回行首但不会擦除它所以下一次打印只会写在已经写过的内容之上但不会擦除下一个字符所以你会得到两条线的混合。

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

所以在两个print之后可以加上

print("3[F3[F", end="")

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

如果您想让它起作用,您还应该删除 print 中的 end="\r"