Python - 有没有办法让输出文本在空闲的顶端结束?

时间:2015-09-15 19:07:56

标签: python python-idle

我只是想知道是否可以在顶行打印最后一件事,例如:

Print("hello")
Print("hello, again...")

让空闲shell看起来像:

hello, again...
hello
而不是相反。有没有人知道python中的任何命令,我可以使用它来使最后一个打印项目出现在shell的顶部?

3 个答案:

答案 0 :(得分:0)

如果我有一个定时器每秒更新一个变量,我将如何确保清除旧值

import time
print("hello", end="\r")
time.sleep(1)
print("hello, again...",end="\r")

您需要从非空闲的地方运行代码,因为它不是真正的tty,使用clearcls也将在空闲时失败。你可以使用注释中提到的curses lib,但实现起来肯定不是一件容易的事,如果你想像你问题中的行那样反转输出你可以将stdout重定向到io.StringIO对象并反转这些行:

from contextlib import redirect_stdout
from io import StringIO
f = StringIO()
with redirect_stdout(f):
    print("hello")
    print("hello, again...")
f.seek(0)
print("".join(f.readlines()[::-1]))

空闲时输出:

hello, again...
hello

如果我是你,我会放弃,你所看到的是使用闲置时可能遇到的许多限制之一。 如果您确实希望保持闲置状态,则应下载idlex extensions,其中{{}}}使闲置工作更像终端

答案 1 :(得分:0)

这在使用Python 3的Windows上对我有用

pip install windows-curses

示例:

import curses
import time

stdscr = curses.initscr()
curses.noecho()
curses.cbreak()

try:           
    stdscr.addstr(0, 0, "Printing Numbers...")
    for i in range(10):
        stdscr.addstr(1, 0, "Number: {0}".format(i))
        stdscr.insertln()
        stdscr.refresh()
        time.sleep(0.5)

finally:
    curses.echo()
    curses.nocbreak()
    curses.endwin()

使用stdscr.insertln()可以在光标下方插入空白行。接下来的所有行都向下移动一行。

有关诅咒的更多信息,请参见: https://docs.python.org/2/library/curses.html

答案 2 :(得分:-1)

我唯一想到的就是跟踪所有打印的内容并每次清理控制台。

import os

console_lines = []
def reverse_print(text):
    console_lines.append(text)
    os.system('cls')
    print('\n'.join(reversed(console_lines)))

reverse_print('hi')
reverse_print('hello')
reverse_print('okay')