2010-12-15 56 views
3

我寫了一個應用程序,其中包括啓動一些「後端」進程來完成某些功能。 這些子過程很可能會失敗或出現意想不到的行爲,因爲它們必須在相當困難的條件下操作,所以我更願意將它們完全控制給操作員。尋找PyQt4可嵌入式終端部件

注:我使用的是subprocess模塊基於類的,而不是QProcess有在運行過程中的一些更多的控制功能運行這些程序。

目前,我正在使用一個QPlainTextEdit小部件,我在子程序中添加標準輸出/錯誤,並加上一些按鈕來快速發送一些常見信號(INT,STOP,CONT,KILL,..),但:

  • 在某些情況下,發送一些輸入也是有用的。雖然可以用文本輸入框完成,但我更願意使用更「專業」的東西
  • 當然,沒有直接解釋特殊控制字符的方法,例如顏色代碼,光標移動等。
  • 我不得不實施控制檯的自動滾動管理,但它並不能保證100%很好地工作(有時如預期滾動鎖定無法正常工作等)

所以說:沒有人知道我可以用來完成這些需求的東西?

我發現qtermwidget,但它似乎更多地處理shell進程(和Python綁定似乎只讓你運行/bin/bash),而不是與已經存在的進程I/O進行通信。

+0

@gruszczy:你爲什麼要從'pyqt4'重新標記爲'pyqt'?他們是兩個非常不同的Python模塊,因爲'pyqt'是舊Qt3的綁定,當然,PyQt4是Qt4的一個.. – redShadow 2011-02-17 23:56:02

回答

0

你可以試試QConsole(http://qconsole.sourceforge.net/)。我沒有使用它,但它看起來像你正在尋找的東西。

+0

我剛剛嘗試過,但它看起來不像描述承諾那麼酷..我只能編譯這個獨立的例子,並沒有找到關於如何構建Python模塊的任何指令。另外,這個例子本身似乎相當麻煩,至少在針對Qt4進行編譯時(將使用q3support,如項目頁面上指定的那樣)。我想這個項目更關注的是TCL插件而不是Python插件。 – redShadow 2010-12-15 13:38:35

+0

這真是一個恥辱。不幸的是,我不知道其他人。 – 2010-12-16 05:11:13

4

這樣做有幫助嗎?

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

import sys 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

class embterminal(QWidget): 

    def __init__(self): 
     QWidget.__init__(self) 
     self.process = QProcess(self) 
     self.terminal = QWidget(self) 
     layout = QVBoxLayout(self) 
     layout.addWidget(self.terminal) 
     self.process.start(
       'xterm',['-into', str(self.terminal.winId())]) 
     # Works also with urxvt: 
     #self.process.start(
       #'urxvt',['-embed', str(self.terminal.winId())]) 

if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    main = embterminal() 
    main.show() 
    sys.exit(app.exec_()) 
+0

很酷,我不知道它有可能這樣做..它仍然需要一些調整(例如終端內的行數是錯誤的),但一般來說似乎工作正常.. – redShadow 2013-02-08 11:58:08

+0

也許你知道一些關於溝通部分,你可以幫我出一個相關的問題:http://stackoverflow.com/q/14772138/406686 – student 2013-02-08 12:05:55

+0

是否有可能讀取環境變量到Python應用程序來顯示信息,而不是每次都必須輸入echo命令? – 2014-08-19 06:40:03