包括while循环时,整个脚本拒绝执行?

时间:2019-04-23 08:28:24

标签: python while-loop

我正在尝试编写一个非常基本的脚本,该脚本获取本地网络上每个设备的主机名,并打印与我的规范匹配的主机名的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 :(得分:0)

一些注意事项:

  1. 使用第一个IP初始化主机名:
ip_end = 1
hostname = socket.gethostbyaddr('192.168.0.{}'.format(ip_end))

这将有助于避免开始时出现任何奇怪的行为。附带说明一下,为了您的知识,我对您的代码进行了一些更改,使其更好地符合命名约定/字符串格式。

  1. 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)