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

Socket Hostname, Can't Get IP

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

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'  

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

您可能会发现这很有趣:String comparison in Python: is vs. ==

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