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

Posted

技术标签:

【中文标题】如何在 python 控制台中显示两个不同的输出【英文标题】:How to display two different outputs in python console 【发布时间】:2016-12-24 07:48:03 【问题描述】:

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

(请原谅我糟糕的设计技巧)

任何想法将不胜感激:)

【问题讨论】:

看看curses 你指的是哪个控制台?它是 Windows 控制台吗?在这种情况下,您需要查看 Windows 控制台 API。 这是一个 Linux 控制台 除了curses(用于分割屏幕并在终端上生成您自己的用户界面)之外,您还可以查看progressbar,它提供了它所说的内容。 【参考方案1】:

如果您需要两个或多个控制台来输出您的 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

【讨论】:

【参考方案2】:

如果有一个 python 应用程序输出 - 使用 @Rawing 建议的 curses 库:https://docs.python.org/3.5/howto/curses.html。它是预先构建好的。

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

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

watch cat file

还有很多其他方法。

【讨论】:

以上是关于如何在 python 控制台中显示两个不同的输出的主要内容,如果未能解决你的问题,请参考以下文章

iPhone如何显示不同的视图控制器以响应设备旋转?

Python:如何比较两个二进制文件?

如何解决 Python print 输出文本显示 gbk 编码错误

如何从Python Tkinter应用程序中捕获任何输出到控制台?

Python中如何设置输出文字的颜色

Python基础(使用print()函数输出格式化字符串)