使xterm窗口保持打开状态直到用户关闭它

1 投票
2 回答
1670 浏览
提问于 2025-04-16 07:01

如何打开一个常驻的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_())

有什么建议吗?

2 个回答

0

这是一个老问题,但提问者在这种情况下想要的是:

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中运行的命令)

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 的教程,这个不错。

撰写回答