代码之家  ›  专栏  ›  技术社区  ›  Mark Evans

Backspace\b转义序列不能用于多个print()函数

  •  6
  • Mark Evans  · 技术社区  · 9 年前
    >>> print("x\by")
    y
    
    print("a", end="")
    print("a", end="")
    print("a", end="")
    print("h", end="")
    
    aaah
    

    但有了多个打印语句,我得到了这个输出-

    print("a\b", end="")
    print("a\b", end="")
    print("a\b", end="")
    print("h\b", end="")
    
    a a a h 
    

    为什么它在每个字符后打印额外的空格。

    当从Windows命令行执行时,代码运行良好,我在Pycharm的控制台中对其进行了测试。

    但在python repl中 \b 擦除前一个字符,同时将光标向后移动一个字符。

    >>> print("a\b", end="")
    >>>
    
    3 回复  |  直到 9 年前
        1
  •  5
  •   Martijn Pieters    9 年前

    每个终端或控制台都可以自由处理 \b 性格不同。Python所能做的就是将数据写入 sys.stdout .

    在这里,您正在使用的控制台会将光标向前移动以进行单独的写入调用。以及 \b个 字符不会擦除控制台中的任何内容,它只是将光标移回一个点 在同一写调用中 .

    所以对于 print('x\by', end='') 控制台输出 x ,后退一步,输出 y 在同一位置,现在已经记录了它写入了3个字符,因此输出位置设置为第3列。下一个 print() 将开始输出数据 从那个新位置 .

    你的 打印() 代码碰巧在大多数终端或控制台上都能工作,因为大多数终端和控制台都不关心输出的字符数,只关心光标当前的位置。但您有一个行为不同的控制台 不是Python的错 .

    在使用Python交互式解释器时,请考虑 它也是 打印;所以使用 print("a\b", end="") 留下Python,然后用下一行覆盖该行 >>> 提示:

    >>> print("a\b", end="")
    >>>
    

    使用 print("a\b\n", end="") 相反,您将看到 a 仍然存在:

    >>> print("a\b\n", end="")
    a
    
        2
  •  0
  •   goto    8 年前

    flush=True是这种情况下的正确答案


    如果您实际在python控制台中打印,那么flush参数首先打印出结果,然后完成函数。在多个转义字符的情况下,您应该看到退格或其他任何打印出来的字符。我不知道为什么会这样,因为我刚刚开始学习Python,但经过彻底的研究和实验,我发现这是真的。

        3
  •  -2
  •   Petko Kamenov    9 年前

    写在末尾

    Flush=true
    

    我认为这就是问题所在,尝试在这里写下输出结果,因为现在我无法测试它。(从手机写入)