Сервер ping - Где и как исправить TypeError «аргумент типа« имя класса »не повторяемый»?

При тестировании сценария проверки связи сервера, опубликованного здесь в SO, я столкнулся с ошибкой:

TypeError: argument of type 'MyCOM' is not iterable

Чтобы увидеть, что анализируется в subprocess.list2cmdline(seq): seq был проверен:

parse result: ['ping', '-n', '192.168.0.2', '-w', '1000', <main.MyCOM object at 0x000002D26267F678>]

MyCOM — это имя класса. Что, как и где это нужно исправить, чтобы работало? Полная трассировка: см. ниже.

Мой графический интерфейс:

    class MainGUI(etc...):
        def __init__(self, *args, parent=None):

            ...snippet...

            self.mycom_thread = MyCOM()
            self.mycom_thread.start()

            ...snippet...

    class MyCOM(QThread):

        def __init__(self, parent = None):
            QThread.__init__(self, parent)

            self.ping_okay = 0

        def ping(host_or_ip, packets=1, timeout=1000):
            ''' Calls system "ping" command, returns True if ping succeeds.
            Required parameter: host_or_ip (str, address of host to ping)
            Optional parameters: packets (int, number of retries), timeout (int, ms to wait for response)
            Does not show any output, either as popup window or in command line.
            Python 3.5+, Windows and Linux compatible (Mac not tested, should work)

            Credits to: SO user Jose Francisco Lopez Pimentel.
            '''
            # The ping command is the same for Windows and Linux, except for the "number of packets" flag.
            if platform.system().lower() == 'windows':
                print ('some text')
                command = ['ping', '-n', str(packets), '-w', str(timeout), host_or_ip]
                # run parameters: capture output, discard error messages, do not show window
                result = subprocess.run(command, stdin=subprocess.DEVNULL, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, creationflags=0x08000000)
                # 0x0800000 is a windows-only Popen flag to specify that a new process will not create a window.
                # On Python 3.7+, you can use a subprocess constant:
                #   result = subprocess.run(command, capture_output=True, creationflags=subprocess.CREATE_NO_WINDOW)
                # On windows 7+, ping returns 0 (ok) when host is not reachable; to be sure host is responding,
                # we search the text "TTL=" on the command output. If it's there, the ping really had a response.
                return result.returncode == 0 and b'TTL=' in result.stdout
            else:
                command = ['ping', '-c', str(packets), '-w', str(timeout), host_or_ip]
                # run parameters: discard output and error messages
                result = subprocess.run(command, stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
                return result.returncode == 0

        def run(self):

            check = 1
            IP = "192.168.0.2"

            while check == 1:
                print (self.ping(IP))

Полная трассировка:

Traceback (most recent call last):
      File "mymain.py", line 1156, in run
        print (self.ping(IP))
      File "mymain.py", line 1137, in ping
        result = subprocess.run(command, stdin=subprocess.DEVNULL, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, creationflags=0x08000000)
      File "x\lib\subprocess.py", line 383, in run
        with Popen(*popenargs, **kwargs) as process:
      File "x\lib\subprocess.py", line 678, in __init__
        restore_signals, start_new_session)
      File "x\lib\subprocess.py", line 933, in _execute_child
        args = list2cmdline(args)
      File "x\lib\subprocess.py", line 443, in list2cmdline
        needquote = (" " in arg) or ("\t" in arg) or not arg
    TypeError: argument of type 'MyCOM' is not iterable
    Exception ignored in: <module 'threading' from 'x\\lib\\threading.py'>
    Traceback (most recent call last):
      File "x\lib\threading.py", line 1294, in _shutdown
        _main_thread._delete()
      File "x\lib\threading.py", line 1013, in _delete
        del _active[get_ident()]

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы решить эту (по-видимому, наследственную) ошибку, необходимо заменить следующую строку:

def ping(host_or_ip, packets=1, timeout=1000):

к

def ping(self, host_or_ip, packets=1, timeout=1000):

предоставление self в качестве первого аргумента, в противном случае наследование будет неверным, и упомянутая ошибка будет возвращена вам.

Другие вопросы по теме