1

私は PySide を使用して Python でプログラムを作成しています。ファイルの IP アドレスを解析し、それらが稼働しているかどうかを確認するために ping を実行し、QTreeWidget に表示します。私が抱えている問題は、プログラムがデータを出力する前にすべてのクライアントにpingを実行し、ping中にプログラムが「フリーズ」することです。プログラムをフリーズさせずに IP アドレスに ping を実行し、出力を印刷するにはどうすればよいですか?

4

1 に答える 1

0

QThread次のようなからアドレスにpingを実行できます。

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

from PyQt4 import QtCore

class PingThread(QtCore.QThread):
    addressState = QtCore.pyqtSignal(bool, QtCore.QString)

    def __init__ (self):
       super(PingThread, self).__init__()

    def start(self, addressList):
       self.addressList = addressList

       super(PingThread, self).start()

    def run(self):
        for address in self.addressList:
            status = True
            ping   = os.popen('ping -q -c2 {0}'.format(address), 'r')
            while True:
               line = ping.readline()
               if not line:
                   break
               if line.find('100% packet loss') > 0:
                   status = False

            self.addressState.emit(status, address)

メインウィジェットには次のようなものが必要です。

self.pingThread = PingThread()
self.pingThread.addressState.connect(self.on_pingThread_addressState)
self.pingThread.start(myListOfAddresses)

on_pingThread_addressStateそしてもちろん、という名前のスロット。

于 2013-03-20T16:13:37.857 に答える