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