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