套接字主机名,无法获取 IP



我在多台计算机之间切换以进行工作,在我们的数据得到运行的服务器之前,我必须手动更改存储屏蔽的文件的路径。这让我很恼火,因为我切换了很多,文件路径也不一样。所以,我正在尝试使用套接字来管理我不同计算机上的文件路径。这是迄今为止的代码:

import socket
hostname = socket.gethostname()
ip_address = socket.gethostbyname(hostname)

if ip_address is '124.0.1.1':
print('Working on laptop 1:')
masked_data = '/mnt/c/Users/file/path/woot/woot'
else:
raise ValueError('Which computer are you on? Need to know for mask filepath...')
exit() 

我想要的基本上是:1(从电脑上取下IP,2(如果是笔记本电脑,1使用该电脑的IP并遵循该文件路径,3(如果不是,则引发错误。(我会为几台电脑更新这个,但谁需要复杂的东西?(

我遇到的问题是:当我运行如上所示的脚本时,它会跳过if语句并抛出错误。但是,如果我添加socket.gethostbyname(hostname)行输出的字符串,它可以正常工作。

即,上面的代码不起作用,但下面的代码起作用:

import socket
ip_address = '124.0.1.1'
if ip_address is '124.0.1.1':
print('Working on laptop 1:')
masked_data = '/mnt/c/Users/file/path/woot/woot'
else:
raise ValueError('Which computer are you on? Need to know for mask filepath...')
exit() 

在Ipython中,当我运行脚本并检查ip_address是什么时,它实际上是一个带有ip地址的字符串。即

In [1]: hostname = socket.gethostname()
In [2]: ip_address = socket.gethostbyname(hostname)
In [3]: ip_address
Out[3]: '124.0.1.1'  

我不知道发生了什么,也不知道为什么这不起作用。

您可能会发现以下有趣之处:Python中的字符串比较:is与==

尝试使用==而不是is来比较字符串。它在比较基础引用,这就是为什么它在第一个程序中不相等。

最新更新