1

作为 Python 新手,我浏览了该站点并找到了部分答案,但没有任何帮助使事情变得清晰。这就是我所拥有的。主窗口通过按钮激活运行命令(wash -C -i monX)的线程,并且表格需要在 GUI 中实时填充结果。我在这里找到了循环的代码Intercepting stdout of a subprocess while it is running。代码在这里https://github.com/theodhori-dhiamanti/wifern/blob/master 有问题的代码是:

class WashThread(QtCore.QThread):


def __init__(self, parent=None):
    super(WashThread, self).__init__(parent)

def run(self):
    global mon_iface
    try:
        if mon_iface != '':
            device = mon_iface
            cmd = ['wash', '-C', '-i', device]
            wash_cmd = Popen(cmd, stdout=PIPE)
            for line in iter(wash_cmd.stdout.readline, b''):
                if line.strip() == '' or line.startswith('---'): continue
                if line.startswith('Wash') or line.startswith('Copyright') or line.startswith('BSSID'): continue
                print line
                Split = line.split(' ')
                wash_bssid = Split[0]
                wash_essid = Split[58]
                wash_power = Split[19]
                wash_locked = Split[42]
        else:
            print('No Good')
    except OSError:
        pass

调用此方法以及需要使用结果的 GUI 部分是:

def wash(self):
    row = 0
    col = 0
    self.wash_tableWidget.setColumnCount(4)
    self.wash_tableWidget.setColumnWidth(1,150)
    self.wash_tableWidget.setColumnWidth(4,30)
    self.wash_tableWidget.setColumnWidth(3,70)
    self.wash_tableWidget.setRowCount(10)

    if self.start_wash_Button.text() == 'Start':
        self.start_wash_Button.setText('Stop')
        self.wash_thread.start()
        row_item = QtGui.QTableWidgetItem(wash_bssid)
        x = QtGui.QTableWidgetItem(wash_essid)
        y = QtGui.QTableWidgetItem(wash_power)
        z = QtGui.QTableWidgetItem(wash_locked)
        self.wash_tableWidget.setItem(row, col, row_item)
        self.wash_tableWidget.setItem(row, 1, x)
        self.wash_tableWidget.setItem(row, 2, y)
        self.wash_tableWidget.setItem(row, 3, z)
        row += 1
    else:
        try:
            os.kill(cmd.pid, SIGTERM)
            print('Done')
        except OSError:
            pass
        except UnboundLocalError:
            pass

self.wash_thread = WashThread() # 在主体中初始化的方法 如何将线程的输出传输到主体部分?之后我可以将值适当地分配给表字段吗?任何帮助是极大的赞赏。* 注意:在线程之外,该方法按预期工作。

4

0 回答 0