2010-11-13 74 views
1

如何调用一个永久的xterm窗口,并且仅在用户关闭时才关闭?使xterm窗口打开,直到用户关闭为止

这里将重现这一问题

import os 
from PyQt4 import QtCore, QtGui 
from main import Ui_MainWindow 

class Main(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
    QtGui.QWidget.__init__(self, parent) 
    self.ui = Ui_MainWindow() 
    self.ui.setupUi(self) 

     QtCore.QObject.connect(self.ui.pushID, QtCore.SIGNAL('clicked()'), self.showid) 

    def showid(self): 
     process = subprocess.Popen(['lsusb'], shell=False, stdout=subprocess.PIPE) 
     process.communicate()[0] 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    main = Main() 
    main.show() 
    sys.exit(app.exec_()) 

任何建议的代码?

+0

请注意'xterm XYZ'将导致xterm作为shell执行XYZ。也就是说,xterm期待类似/ bin/sh的东西,而不是任何其他类型的可执行文件。 – chrisaycock 2010-11-13 17:05:49

回答

4

请勿使用os.system。使用subprocess

>>> import subprocess 
>>> subprocess.Popen(['xterm']) 

虽然你是越来越好从subprocess不涉及xterm输出。

>>> process = subprocess.Popen(['lsusb'], shell=False, stdout=subprocess.PIPE) 
>>> process.communicate()[0] 

请注意shell=False。这是如何读取lsusb命令的输出。

如果您正在寻找关于subprocess的教程,this是很好的。

+0

谢谢先生..它真的有效.. – nEk0 2010-11-13 17:13:17

+0

嗯..这怎么可以用PyQt4?我想使壳内出现与lsusb输出,当它点击一些按钮..我只是想让代码,使壳内出现lsusb输出.. – nEk0 2010-11-13 17:28:52

+1

我不能给你的代码,但你可以阅读它为了更好的理解。你要求的是漂亮的。 http://lateral.netmanagers.com.ar/stories/BBS47.html – user225312 2010-11-13 17:29:45

0

这是一个老问题,但什么OP在这种情况下,想要的是:

import subprocess 
subprocess.Popen(['xterm','-hold','-title','Usb Devices Available','-geometry','80x30+2000+0','-e','lsusb']) 

-hold(保持xterm窗口打开一旦执行)
-title(在xterm窗口的名称)而不-title窗口需要执行的命令的名称,在这种情况下lsusb
-geometry(端子宽度,高度,水平位置,垂直位置)
-e(一切之后,这是命令来运行)
的lsusb (我希望在xterm中运行的命令)