检查socket是否在python中使用

时间:2015-10-01 20:14:51

标签: python windows sockets netstat terminal-server

我正在运行一个telnet到terminal server的脚本。有时,一个实例已在运行时启动脚本,这会导致已运行的脚本失败并显示

EOFError: telnet connection closed

在我尝试使用pythonic打开连接之前,是否有快速简便的telnetlib方法检查客户端计算机上是否已使用所需的套接字?

解决方案:

我想避免进行子进程调用,但由于我不控制客户端计算机上的软件,而其他程序可能使用相同的套接字,下面的文件锁定建议(一个好主意)不会起作用我。我最终使用了SSutrave的建议。这是我在Windows 7中使用netstat的工作代码:

# make sure the socket is not already in use
try:
    netstat = subprocess.Popen(['netstat','-nao'],stdout=subprocess.PIPE)
except:
    raise ValueError("couldn't launch netstat to check sockets. exiting")
ports = netstat.communicate()[0]
if (ip + ':' + port) in ports:
    print 'socket ' + ip + ':' + port + ' in use on this computer already. exiting'
    return

2 个答案:

答案 0 :(得分:3)

您可以通过在python中导入netstat | grep 'port number' | wc -l库运行以下linux命令subprocess来检查开放端口。

答案 1 :(得分:1)

在尝试连接服务器之前,没有一种标准方法可以知道服务器是否有其他已打开的连接。您必须要求它连接到检查它的服务器中的另一个服务,或者询问其他客户端,如果您知道所有这些服务。

也就是说,telnet服务器应该能够一次处理多个连接,因此连接的客户端数量不多也无关紧要。