Весь сценарий отказывается выполняться, когда включает цикл while? - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь написать очень простой скрипт, который получает имя хоста каждого устройства в локальной сети и печатает IP-адрес хоста, который соответствует моей спецификации.однако код просто не запускается.После нескольких проб и ошибок я понял, что все в коде работает нормально, без цикла while, но как только он включен, создается впечатление, что в файл ничего не записано.Я понятия не имею, почему это происходит

import socket, pyperclip
myPC = socket.gethostname()
hostName = ''
ipEnd = 0
while str(hostName[0]) != myPC:
    ipEnd += 1
    hostName = str(socket.gethostbyaddr('192.168.0.' + str(ipEnd)))
    pyperclip.copy('afterloop')
print(ipEnd)

РЕДАКТИРОВАТЬ: новый код (все еще неисправен) выглядит так:

import socket, pyperclip
myPC = socket.gethostname()
hostName = 'placeholder'
ipEnd = 0
while hostName[0] != myPC:
    ipEnd += 1
    hostName = socket.gethostbyaddr('192.168.0.' + str(ipEnd))
    pyperclip.copy('afterloop')
print(ipEnd)

1 Ответ

0 голосов
/ 23 апреля 2019

Несколько замечаний, которые стоит попробовать:

  1. Инициализируйте имя хоста с первым IP:
ip_end = 1
hostname = socket.gethostbyaddr('192.168.0.{}'.format(ip_end))

Это поможет избежать любого странного поведения при запуске.В качестве примечания я немного изменил ваш код, чтобы он был лучше в соответствии с соглашениями об именах / форматированием строк только для вашего знания.

socket.gethostbyaddr возвращает кортеж (hostname, aliaslist, ipaddrlist), однако вы конвертируете все это в str.Это означает, что когда вы делаете hostname[0], вы берете только первый символ строки (в данном случае ().

Попробуйте изменить цикл while, чтобы он выглядел примерно так:

import socket, pyperclip
my_pc = socket.gethostname()
ip_end = 1
hostname = socket.gethostbyaddr('192.168.0.{}'.format(ip_end))[0]
while hostname != my_pc:
  ip_end += 1
  hostname = socket.gethostbyaddr('192.168.0.{}'.format(ip_end))[0]
  pyperclip.copy('afterloop')
print(ip_end)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...