如何在Python控制台中显示两个不同的输出

9

有没有办法分割输出控制台? 我想在顶部显示一个部分(主程序),底部将显示进度条。

(请原谅我的可怕设计技巧)

enter image description here

任何想法将不胜感激 :)

4
请查看curses - Aran-Fey
你指的是哪个控制台?是Windows控制台吗?如果是的话,你需要查看Windows控制台API。 - cdarke
这是一个Linux控制台。 - necross
除了使用curses(用于在终端上分割屏幕并生成自己的用户界面)之外,您还可以看一下progressbar,它提供了所需的功能。 - albert
你到底为什么要在Linux控制台中运行这样的东西?使用窗口管理系统并在终端中运行它!https://unix.stackexchange.com/questions/4126/what-is-the-exact-difference-between-a-terminal-a-shell-a-tty-and-a-con - William Pursell
2个回答

0

如果有一个使用curses库输出的Python应用程序,就像@Rawing建议的那样:https://docs.python.org/3.5/howto/curses.html。它是预先构建好的并且随手可得。

如果有更多的应用程序需要输出数据,有几种方法可以实现。首先,您可以使用byobu或类似工具,在同一屏幕上拥有来自不同应用程序的输出的分割终端。其次,您可以有一个广播应用程序,该应用程序从工作应用程序(或线程)收集数据,并稍后使用curses显示它们(参见上文)。

此外,您可以将数据转储到文件中,然后使用Linux watch命令定期显示内容:

watch cat file

还有很多其他的方法。


0
如果你需要两个或多个控制台来输出你的Python脚本,那么如果你在Windows上,你可以这样做。 使用win32console模块为你的线程或子进程输出打开第二个控制台。
以下是示例代码:
import win32console
import multiprocessing

def subprocess(queue):
    win32console.FreeConsole() #Frees subprocess from using main console
    win32console.AllocConsole() #Creates new console and all input and output of subprocess goes to this new console
    while True:
        print(queue.get())
        #prints any output produced by main script passed to subprocess using queue

if __name__ == "__main__": 
    queue = multiprocessing.Queue()
    multiprocessing.Process(target=subprocess, args=[queue]).start()
    while True:
        print("Hello World in main console")
        queue.put("Hello work in sub process console")
        #sends above string to subprocess and it prints it into its console

        #and whatever else you want to do in ur main process

你也可以使用线程来实现这个功能。如果你想要队列功能,就必须使用队列模块,因为线程模块本身不带队列。

这里是win32console 模块的文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接