我在不同的主机上执行相同的python文件。如何在主机中执行主机时获取主机的IP地址?
里面的Python文件有bind
。第一次我在'H1'主机中执行这个文件,下次我在'H2'主机中执行。在'H1'主机中执行时,我想使用H1的IP地址进行绑定。在'H2'主机中执行时,我想使用'H2'主机的IP地址进行绑定。
因此,在IP地址的地方,我应该给予什么样的IP地址作为H1的IP地址,而此文件在H2中执行时,此H1文件在H2和IP中执行时是H1的IP地址吗?
我在不同的主机上执行相同的python文件。如何在主机中执行主机时获取主机的IP地址?
里面的Python文件有bind
。第一次我在'H1'主机中执行这个文件,下次我在'H2'主机中执行。在'H1'主机中执行时,我想使用H1的IP地址进行绑定。在'H2'主机中执行时,我想使用'H2'主机的IP地址进行绑定。
因此,在IP地址的地方,我应该给予什么样的IP地址作为H1的IP地址,而此文件在H2中执行时,此H1文件在H2和IP中执行时是H1的IP地址吗?
如果我们对IPv4地址,那么在大多数情况下,你并不需要指定主机地址bind()
。从documentation:
对于IPv4地址,两个特殊的形式被接受,而不是一个主机地址:空字符串代表
INADDR_ANY
和字符串'<broadcast>'
代表INADDR_BROADCAST
。
这很可能是你只是想提供空字符串(这将使你的服务监听所有可用的接口)。
如果你还需要知道脚本运行的机器的主机名,你可以使用socket.gethostname()
:
返回一个包含在Python解释器当前正在执行的机器的主机名的字符串。
如果你想知道当前机器的IP地址,您可能需要使用
gethostbyname(gethostname())
。此操作假定主机有一个有效的地址到主机映射,并且该假设并不总是成立。
请注意,许多机器有多个IP地址(甚至不包括127.0.0.1)。 INADDR_ANY将监听所有可用的地址;如果你不想要这种行为,你需要指定绑定的地址。 – mpez0
你只是想要运行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
这是非常不清楚。 – aIKid
绑定时不能离开IP,它会自动使用主机的IP? – Barmar
@aIKid我的python文件是一个服务器。我在不同的主机上执行此操作。我希望我的服务器文件中的主机的IP地址用于绑定。 –