gpt4 book ai didi

python - 仅当 QProcess Stdout 包含子字符串时才打印它

转载 作者:行者123 更新时间:2023-12-01 02:47:59 25 4
gpt4 key购买 nike

PyQt4 应用程序在 QProcess 中运行 ping。名为 self.outputQTextEdit 将输出 ping 的所有内容。名为 self.summary 的第二个 QTextEdit 只会输出包含字符串 TTL 的行。

问题:我已经设法使 self.output 工作,但不能使 self.summary 工作,因为我不确定如何编写其代码在 dataReady 函数中。有什么想法吗?

enter image description here

import sys
from PyQt4 import QtGui, QtCore


class MainWindow(QtGui.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.initUI()


def dataReady(self):
cursorOutput = self.output.textCursor()
cursorSummary = self.summary.textCursor()

cursorOutput.movePosition(cursorOutput.End)
cursorSummary.movePosition(cursorSummary.End)

processStdout = str(self.process.readAll())

# Update self.output
cursorOutput.insertText(processStdout)

# Update self.summary
for line in processStdout:
if 'TTL' in line:
cursorSummary.insertText(line)


self.output.ensureCursorVisible()
self.summary.ensureCursorVisible()


def callProgram(self):
self.process.start('ping', ['127.0.0.1'])


def initUI(self):
layout = QtGui.QHBoxLayout()
self.runBtn = QtGui.QPushButton('Run')
self.runBtn.clicked.connect(self.callProgram)

self.output = QtGui.QTextEdit()
self.summary = QtGui.QTextEdit()

layout.addWidget(self.runBtn)
layout.addWidget(self.output)
layout.addWidget(self.summary)

centralWidget = QtGui.QWidget()
centralWidget.setLayout(layout)
self.setCentralWidget(centralWidget)

# QProcess object for external app
self.process = QtCore.QProcess(self)
self.process.readyRead.connect(self.dataReady)
self.process.started.connect(lambda: self.runBtn.setEnabled(False))
self.process.finished.connect(lambda: self.runBtn.setEnabled(True))


def main():
app = QtGui.QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())


if __name__ == '__main__':
main()

最佳答案

您可能遇到的一个问题是,QProcess 的每个输出可能有几行,即包含 "\n",为了避免这个问题,我们将其分开,然后我们进行搜索:

for line in processStdout.split("\n"):
if "TTL" in line:
cursorSummary.insertText(line+"\n")

在您的初始代码中,您将使用 for 循环获取每个字符,这会生成错误。

enter image description here

注意:在 Linux 中,我必须按单词 ttl 进行过滤。除了将 QProcess 更改为: self.process.start('ping', ['-c', '3', '127.0.0.1'])

关于python - 仅当 QProcess Stdout 包含子字符串时才打印它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45087825/

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