具有可见控制台窗口的Linux Python进程

时间:2017-04-21 17:31:00

标签: python linux shell process output

我对Linux上的Python有疑问。我有一个目前在Windows上运行的Python应用程序。应用程序控制一些硬件,每个硬件控制应用程序都在其自己的进程中运行,这反过来有时会启动自己的进程。进程与命名管道(称为互斥锁)和命名的内存映射文件通信到主控制进程,但每个应用程序进程都有自己的控制台窗口。这允许用户为一个应用程序进程选择窗口,代表一个硬件项目,并查看它正在做什么。它还允许简单的打印"在该窗口上为该进程生成调试语句。在Windows上这很容易,因为os.startfile或subprocess.popen可以在一个单独的进程中,在新的控制台窗口中运行python脚本,并捕获" print"在该窗口输出。主进程启动所有应用程序进程,然后最小化窗口,使用户可以轻松选择一个(或多个)进行查看。应用程序在完成后写入日志文件,但每个文件都有一个控制台窗口,可以实时查看进度和消息。

我需要制作一个这个版本的linux版本,而且我遇到了问题。我无法弄清楚如何让Linux在一个单独的,可见的进程窗口中打开一个应用程序。如果我使用subprocess.popen和shell = True,我会得到一个单独的进程,但是没有可见的窗口。如果我设置stdout = subprocess.PIPE,应用程序不是在一个单独的进程中,而是使用主进程窗口进行打印,并顺便挂起主进程直到它完成(这在我的应用程序中是灾难性的) )。我找到了一个解决方法,我用shell = True打开应用程序进程,然后应用程序进程创建一个命名管道并打开自己的GUI(使用shell = True)进行输出显示。但这意味着我必须更改应用程序进程中的所有print语句才能转到命名管道,这是一项繁重的工作。另外,如果Windows和Linux版本在窗口显示方式上看起来相同,那将是很好的(但不是必不可少的)。

在Python中,有没有办法在一个开放的,可见的窗口中启动一个新的Python进程,该窗口将捕获" print"声明?或者我想做一些Linux不支持的事情?我宁愿不将所有内容更改为套接字 - 使用GUI和命名管道方法可能比使用它更容易。

感谢您的任何回答或见解。

0 个答案:

没有答案