gpt4 book ai didi

python - 如何使用嵌入在 PyQt GUI 中的终端

转载 作者:太空宇宙 更新时间:2023-11-03 14:19:51 24 4
gpt4 key购买 nike

有一个可通过 Bash 终端使用的现有环境和框架,我想围绕它制作一个 GUI。我想到的是以下流程:

  • 在 Bash session 中,设置框架环境。这导致在 session 中设置从环境变量到身份验证的所有内容。
  • 运行 Python GUI 脚本以环绕现有 session 并使其更容易运行后续步骤。
  • 出现 GUI,一侧显示嵌入式终端中的 Bash session ,另一侧显示一组按钮,对应于可在现有框架环境中运行的各种命令。
  • 可以在 GUI 中按下按钮,从而运行某些 Bash 命令。运行结果显示在嵌入式终端中。

创建此类 GUI 的好方法是什么?我意识到与现有 环境交互的想法可能很棘手。如果它特别棘手,我愿意在 GUI session 中重新创建环境。无论如何,GUI如何与嵌入式终端交互。如何在按下GUI按钮时在嵌入式终端中运行并显示命令?

GUI(具有嵌入式终端)的基本启动如下:

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

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

class embeddedTerminal(QWidget):

def __init__(self):

QWidget.__init__(self)
self.resize(800, 600)
self.process = QProcess(self)
self.terminal = QWidget(self)
layout = QVBoxLayout(self)
layout.addWidget(self.terminal)
self.process.start(
'xterm',
['-into', str(self.terminal.winId())]
)

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

在 GUI 中按下按钮后,如何在此嵌入式终端上运行 top

最佳答案

如果它必须是一个真正的终端和一个真正的 shell(而不只是接受一行输入,运行一些命令,然后显示输出)——tmux 怎么样?

您可以使用 tee 之类的东西将输出返回到您的程序中。

请注意,tmux session 可能会在您的程序运行期间持续存在,因此您需要阅读它的工作原理以及如何控制它。

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

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

class embeddedTerminal(QWidget):

def __init__(self):
QWidget.__init__(self)
self._processes = []
self.resize(800, 600)
self.terminal = QWidget(self)
layout = QVBoxLayout(self)
layout.addWidget(self.terminal)
self._start_process(
'xterm',
['-into', str(self.terminal.winId()),
'-e', 'tmux', 'new', '-s', 'my_session']
)
button = QPushButton('List files')
layout.addWidget(button)
button.clicked.connect(self._list_files)

def _start_process(self, prog, args):
child = QProcess()
self._processes.append(child)
child.start(prog, args)

def _list_files(self):
self._start_process(
'tmux', ['send-keys', '-t', 'my_session:0', 'ls', 'Enter'])

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

这里还有一点:https://superuser.com/questions/492266/run-or-send-a-command-to-a-tmux-pane-in-a-running-tmux-session

关于python - 如何使用嵌入在 PyQt GUI 中的终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29112349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com