2013-10-29 196 views
0

我在不同的主機上執行相同的python文件。如何在主機中執行主機時獲取主機的IP地址?

裏面的Python文件有bind。第一次我在'H1'主機中執行這個文件,下次我在'H2'主機中執行。在'H1'主機中執行時,我想使用H1的IP地址進行綁定。在'H2'主機中執行時,我想使用'H2'主機的IP地址進行綁定。

因此,在IP地址的地方,我應該給予什麼樣的IP地址作爲H1的IP地址,而此文件在H2中執行時,此H1文件在H2和IP中執行時是H1的IP地址嗎?

+0

這是非常不清楚。 – aIKid

+0

綁定時不能離開IP,它會自動使用主機的IP? – Barmar

+0

@aIKid我的python文件是一個服務器。我在不同的主機上執行此操作。我希望我的服務器文件中的主機的IP地址用於綁定。 –

回答

0

如果我們對IPv4地址,那麼在大多數情況下,你並不需要指定主機地址bind()。從documentation

對於IPv4地址,兩個特殊的形式被接受,而不是一個主機地址:空字符串代表INADDR_ANY和字符串'<broadcast>'代表INADDR_BROADCAST

這很可能是你只是想提供空字符串(這將使你的服務監聽所有可用的接口)。

如果你還需要知道腳本運行的機器的主機名,你可以使用socket.gethostname()

返回一個包含在Python解釋器當前正在執行的機器的主機名的字符串。

如果你想知道當前機器的IP地址,您可能需要使用gethostbyname(gethostname())。此操作假定主機有一個有效的地址到主機映射,並且該假設並不總是成立。

+0

請注意,許多機器有多個IP地址(甚至不包括127.0.0.1)。 INADDR_ANY將監聽所有可用的地址;如果你不想要這種行爲,你需要指定綁定的地址。 – mpez0

0

你只是想要運行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