我在不同的主機上執行相同的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地址用於綁定。 –