我在不同的主机上执行相同的 python 文件。
在 python 文件里面有bind
. 我第一次在“H1”主机中执行此文件,下一次在“H2”主机中执行。在“H1”主机中执行时,我想使用 H1 的 IP 地址进行绑定。在“H2”主机中执行时,我想使用'H2'主机的IP地址进行绑定。
那么在IP地址的地方我应该给出什么,以便我将获得所需的IP地址,即H1的IP,而这个python文件在H1中执行,而这个文件在H2中执行,H2的IP?
我在不同的主机上执行相同的 python 文件。
在 python 文件里面有bind
. 我第一次在“H1”主机中执行此文件,下一次在“H2”主机中执行。在“H1”主机中执行时,我想使用 H1 的 IP 地址进行绑定。在“H2”主机中执行时,我想使用'H2'主机的IP地址进行绑定。
那么在IP地址的地方我应该给出什么,以便我将获得所需的IP地址,即H1的IP,而这个python文件在H1中执行,而这个文件在H2中执行,H2的IP?
您只是想要运行 python 脚本的机器的 IP 地址吗?这个答案取决于操作系统,但可以在 *nix 系统上使用。它也可以适用于 Windows:
try:
o1 = subprocess.check_output("/sbin/ifconfig eth0 | awk '/inet/ { print $2 } ' | sed -e s/addr://", shell=True).split()[0]
except:
o1 = None #parsing failed for some reason
如果我们谈论的是 IPv4 地址,那么在大多数情况下,您不需要将主机地址指定为bind()
. 从文档中:
对于 IPv4 地址,接受两种特殊形式来代替主机地址:空字符串表示
INADDR_ANY
,字符串'<broadcast>'
表示INADDR_BROADCAST
。
您很可能只想提供空字符串(这将使您的服务侦听所有可用接口)。
如果您仍然需要知道运行脚本的机器的主机名,您可以使用socket.gethostname()
:
返回一个字符串,其中包含 Python 解释器当前正在执行的机器的主机名。
如果您想知道当前机器的 IP 地址,您可能需要使用
gethostbyname(gethostname())
. 此操作假定主机存在有效的地址到主机映射,并且该假设并不总是成立。