Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyside ping一个ip列表';s_Python_Pyqt_Pyside - Fatal编程技术网

Python Pyside ping一个ip列表';s

Python Pyside ping一个ip列表';s,python,pyqt,pyside,Python,Pyqt,Pyside,我正在用PySide用python编写一个程序,我解析一个文件的IP地址并ping它们以查看它们是否启动,然后在QTreeWidget中显示它。我遇到的问题是,程序在输出数据之前ping所有客户端,导致程序在ping时“冻结”。如何在不冻结程序的情况下ping IP地址并打印输出?您可以从QThreadping地址,类似于: #!/usr/bin/env python #-*- coding:utf-8 -*- from PyQt4 import QtCore class PingThrea

我正在用PySide用python编写一个程序,我解析一个文件的IP地址并ping它们以查看它们是否启动,然后在QTreeWidget中显示它。我遇到的问题是,程序在输出数据之前ping所有客户端,导致程序在ping时“冻结”。如何在不冻结程序的情况下ping IP地址并打印输出?

您可以从
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)

当然,还有一个名为
的插槽位于\u pingThread\u addressState

给我们一些代码,我们可以帮助您修复它