在linux中,我可以在下面的函數中使用lsof -i
爲:在python中是否有跨平臺的方式來確定哪個進程正在偵聽給定的端口?
def FindProcessUsingPort(portnum):
import os
fp = os.popen("lsof -i :%s" % portnum)
lines = fp.readlines()
fp.close()
pid = None
if len(lines) >= 2:
pid = int(lines[1].split()[1])
return pid
是否有一個跨平臺的方式來算出這個?
作爲相關參考,一旦我知道進程ID,psutil庫非常好,可以讓我以跨平臺的方式確定各種有用的進程信息。我目前無法讓第一部分工作(找到pid)跨平臺。
如果不熟悉lsof -i
開關,輸出看起來像下面(啓動打開一個TCP套接字監聽1234端口一個python程序後):
$ lsof -i :1234 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME python 22380 russ 15u IPv4 4015476 0t0 TCP *:1234 (LISTEN)
請參閱:http://stackoverflow.com/questions/ 15708/lsof的等價換窗戶。他們談論文件,但它不太可能讓端口更容易。 – tokland 2010-10-06 16:13:31
@tokland:謝謝。但我正在尋找一種不需要安裝特定於操作系統的非Python包的方法。我同意它可能不太可能在Windows上,但我仍然需要問。無論如何,鏈接到引用sysinternals的東西......當在Windows中這些工具是不可或缺的。 – Russ 2010-10-06 16:51:30