2013-03-19 70 views
1

我正在使用PySide編寫一個python程序,我解析一個IP地址的文件並ping它們以查看它們是否啓動並顯示在QTreeWidget中。我遇到的問題是程序在輸出數據之前先ping所有客戶端,導致程序在執行ping操作時「凍結」。如何在不凍結我的程序的情況下ping IP地址並打印輸出?Pyside ping ip列表

+1

給我們一些代碼,所以我們可以幫助您解決它 – Vor 2013-03-20 00:52:28

回答

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插槽,當然。