检查套接字是否在 python 中使用
Check if socket is in use in python
我是 运行 远程登录到 terminal server
的脚本。有时脚本在一个实例已经 运行 时启动,这会导致已经 运行 的脚本失败并显示
EOFError: telnet connection closed
在我尝试打开与 telnetlib
的连接之前,是否有一种快速简便且 pythonic
的方法来检查客户端计算机上是否已使用所需的套接字?
解决方案:
我想避免进行子进程调用,但由于我不控制客户端计算机上的软件,并且其他程序可能使用相同的套接字,下面的文件锁定建议(一个好主意)不适用于我。我最终使用了 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
在您尝试连接之前,没有标准的方法可以知道服务器是否有其他打开的连接。您必须要求它连接到检查它的服务器中的另一个服务,或者询问其他客户端,如果您知道所有这些客户端。
就是说,telnet 服务器一次应该能够处理多个连接,因此连接的客户端数量更多应该无关紧要。
您可以通过 运行 以下 linux 命令 netstat | grep 'port number' | wc -l
通过在 python 中导入 subprocess
库来检查开放端口。
我是 运行 远程登录到 terminal server
的脚本。有时脚本在一个实例已经 运行 时启动,这会导致已经 运行 的脚本失败并显示
EOFError: telnet connection closed
在我尝试打开与 telnetlib
的连接之前,是否有一种快速简便且 pythonic
的方法来检查客户端计算机上是否已使用所需的套接字?
解决方案:
我想避免进行子进程调用,但由于我不控制客户端计算机上的软件,并且其他程序可能使用相同的套接字,下面的文件锁定建议(一个好主意)不适用于我。我最终使用了 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
在您尝试连接之前,没有标准的方法可以知道服务器是否有其他打开的连接。您必须要求它连接到检查它的服务器中的另一个服务,或者询问其他客户端,如果您知道所有这些客户端。
就是说,telnet 服务器一次应该能够处理多个连接,因此连接的客户端数量更多应该无关紧要。
您可以通过 运行 以下 linux 命令 netstat | grep 'port number' | wc -l
通过在 python 中导入 subprocess
库来检查开放端口。