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

时间:2016-08-17 15:04:56

标签: python split terminal

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

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

enter image description here

任何想法都将不胜感激:)

2 个答案:

答案 0 :(得分:0)

如果有一个python应用程序输出 - 使用curses库作为@Rawing建议:https://docs.python.org/3.5/howto/curses.html。它已经预先制作好了。

如果有更多应用程序输出数据,有几种方法可以执行此操作。首先,您可以使用byobu或类似的,并在同一屏幕上显示分离终端和不同应用程序的输出。其次,您可以拥有一个广播应用程序,它可以从工作者应用程序(或线程)收集数据,并在以后使用curses显示它们(参见上文)。

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

watch cat file

还有很多其他方法。

答案 1 :(得分: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 module documentation