【问题标题】:Socket Hostname, Can't Get IP [duplicate]套接字主机名,无法获取 IP [重复]
【发布时间】:2020-08-13 01:04:11
【问题描述】:

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

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 sockets ip


    【解决方案1】:

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

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

    【讨论】:

    • 我就知道会这么简单!效果很好,谢谢。
    猜你喜欢
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 2014-12-08
    • 2015-07-08
    • 2012-08-03
    相关资源
    最近更新 更多